{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# TensorFlow进阶\n",
    "\n",
    "## 合并与分割\n",
    "### 合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "import tensorflow.keras as keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=13, shape=(10, 35, 8), dtype=float32, numpy=\n",
       "array([[[ 5.8873630e-01, -3.4746164e-01,  5.7960927e-01, ...,\n",
       "         -7.6357228e-01, -4.0988418e-01,  4.6679187e-01],\n",
       "        [ 1.7340827e+00,  3.6109924e-01,  3.5839298e-01, ...,\n",
       "         -8.4251952e-01, -9.4862044e-02, -7.7858531e-01],\n",
       "        [ 3.7536284e-01, -4.4463688e-01, -3.3374853e-03, ...,\n",
       "          3.1173680e-02,  1.1202271e+00,  5.3370297e-01],\n",
       "        ...,\n",
       "        [-1.1978648e+00,  1.4992204e-01,  2.3154202e-01, ...,\n",
       "         -1.4378194e+00,  5.0423759e-01, -9.6588582e-01],\n",
       "        [-6.7485356e-01, -5.0350660e-01, -3.1832105e-01, ...,\n",
       "          1.8675824e-01, -4.4114500e-01, -2.4754806e-01],\n",
       "        [-1.4981645e+00,  6.0118037e-01,  4.1660586e-01, ...,\n",
       "          5.3553319e-01,  1.3251185e-01, -1.1279777e+00]],\n",
       "\n",
       "       [[-7.2804105e-01, -8.7238109e-01,  6.4365840e-01, ...,\n",
       "         -2.1067724e+00,  6.9023126e-01, -1.4386853e+00],\n",
       "        [ 1.6172041e+00, -1.6047848e+00,  6.4429432e-01, ...,\n",
       "          3.0422714e-01, -9.5787448e-01, -1.4598402e-01],\n",
       "        [ 5.8116890e-02, -7.2596818e-01, -2.3586404e+00, ...,\n",
       "         -1.8376625e+00, -9.9101031e-01,  3.6569819e-01],\n",
       "        ...,\n",
       "        [-8.8487577e-01, -7.2243315e-01, -9.3292659e-03, ...,\n",
       "          1.5532967e+00,  1.7154141e-01,  9.8415321e-01],\n",
       "        [-5.6787124e-03,  6.7896777e-01,  1.0542044e-01, ...,\n",
       "          2.3065355e-02, -6.7862576e-01, -3.1122725e-02],\n",
       "        [-1.1756705e+00, -3.7320575e-01,  1.1635029e+00, ...,\n",
       "         -2.4404955e+00,  1.8506412e-01,  8.2615107e-01]],\n",
       "\n",
       "       [[ 6.5074062e-01, -1.1004263e+00,  8.6023533e-01, ...,\n",
       "         -1.0872072e+00,  7.2963193e-02,  9.9067527e-01],\n",
       "        [-8.4473240e-01,  1.3112979e+00, -1.3336669e+00, ...,\n",
       "         -5.5306554e-01,  5.8246648e-01,  7.0702392e-01],\n",
       "        [ 3.5479712e-01,  5.6925699e-02, -6.3399427e-02, ...,\n",
       "          1.6131678e+00, -2.6600571e+00,  2.8983172e-02],\n",
       "        ...,\n",
       "        [-1.4241484e+00,  2.3135822e-02,  3.7963253e-01, ...,\n",
       "          5.7896173e-01,  1.2490654e+00,  3.3548102e-01],\n",
       "        [-4.1896552e-01, -3.2833350e-01, -2.2973418e+00, ...,\n",
       "          1.4428749e+00, -8.4934048e-02,  3.9773071e-01],\n",
       "        [ 1.0475599e+00, -2.1332338e+00, -2.3299475e-01, ...,\n",
       "          1.6989485e+00, -7.4385816e-01, -5.2485481e-02]],\n",
       "\n",
       "       ...,\n",
       "\n",
       "       [[ 1.3806267e-01, -1.0001433e+00, -1.0332371e+00, ...,\n",
       "          3.4810588e-01, -1.5399296e+00,  8.0211109e-01],\n",
       "        [-4.2657232e-01,  1.4286960e+00, -1.2392858e+00, ...,\n",
       "          2.5635345e+00, -8.5915524e-01, -5.5192018e-01],\n",
       "        [-1.7391770e-01,  2.6023865e-01,  1.5100174e+00, ...,\n",
       "         -1.1155825e+00, -3.6424795e-01,  5.6845453e-03],\n",
       "        ...,\n",
       "        [ 9.7361326e-01, -7.5430954e-01,  4.6809745e-01, ...,\n",
       "          1.0314345e-01, -2.0382553e-01,  2.3887935e+00],\n",
       "        [-1.4517415e-01, -9.9806815e-01,  4.4316158e-01, ...,\n",
       "         -1.0922176e+00, -7.8187996e-01,  7.2049898e-01],\n",
       "        [ 1.5808532e+00,  1.2646809e-01,  1.9382334e-01, ...,\n",
       "         -3.9391997e-01, -1.4993318e+00, -4.1405797e-01]],\n",
       "\n",
       "       [[ 3.1172676e-02, -1.4172831e-01,  3.6834529e-01, ...,\n",
       "         -5.6198013e-01, -1.3014482e-03,  1.3913579e+00],\n",
       "        [-1.4007704e-01,  1.7232971e+00, -3.0246973e-01, ...,\n",
       "         -8.8373190e-01, -1.3324952e+00,  1.1236955e+00],\n",
       "        [-9.4767165e-01,  7.9316372e-01, -9.7957283e-02, ...,\n",
       "         -3.2654566e-01, -4.2889020e-01, -5.8051413e-01],\n",
       "        ...,\n",
       "        [-1.1570679e+00,  6.4866948e-01, -2.1131660e-01, ...,\n",
       "          7.4193811e-01,  7.4128920e-01,  7.0624137e-01],\n",
       "        [-5.1337570e-01, -6.9336236e-01,  1.6425179e+00, ...,\n",
       "          8.0509770e-01, -2.1114597e-02,  3.3127189e-01],\n",
       "        [ 6.2859005e-01,  6.5101022e-01, -4.1080758e-01, ...,\n",
       "          1.4306355e+00, -3.6622822e-01,  7.9074204e-01]],\n",
       "\n",
       "       [[-7.5114685e-01,  8.3478773e-01, -8.5360080e-01, ...,\n",
       "          1.2024848e+00, -3.1930593e-01,  1.7642475e+00],\n",
       "        [ 6.1916681e-03,  1.6822115e+00, -1.3008794e+00, ...,\n",
       "          1.8074086e+00, -1.1358913e+00,  1.9553567e+00],\n",
       "        [-5.1084203e-01,  2.1026941e-01,  5.7158267e-01, ...,\n",
       "         -5.2231747e-01, -1.2575730e+00,  2.9447773e-01],\n",
       "        ...,\n",
       "        [ 2.2689817e+00, -1.8049911e-01,  2.5787756e-01, ...,\n",
       "         -8.6062717e-01,  6.8294936e-01,  1.1695143e+00],\n",
       "        [ 4.9138936e-01,  1.4028429e+00, -1.2222331e+00, ...,\n",
       "          6.8130654e-01, -8.6081064e-01,  2.4327655e+00],\n",
       "        [ 7.7110231e-01, -7.6876336e-01,  1.5312434e+00, ...,\n",
       "         -7.9823166e-01, -5.8098364e-01,  3.5553032e-01]]], dtype=float32)>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模拟成绩册 A\n",
    "a = tf.random.normal([4,35,8]) \n",
    "# 模拟成绩册 B\n",
    "b = tf.random.normal([6,35,8]) \n",
    "# 拼接合并成绩册\n",
    "tf.concat([a,b],axis=0) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=27, shape=(10, 35, 8), dtype=float32, numpy=\n",
       "array([[[-1.7785313 ,  0.44671088,  1.906389  , ...,  0.22660032,\n",
       "          0.5989278 , -1.3929954 ],\n",
       "        [-0.44945407, -1.2888883 , -1.3782029 , ..., -0.24018878,\n",
       "         -1.429324  , -0.4898744 ],\n",
       "        [-2.222835  ,  1.0280398 , -0.15853332, ...,  2.0460744 ,\n",
       "         -0.46051008,  0.02343535],\n",
       "        ...,\n",
       "        [ 0.3946474 , -0.05992594,  1.2470436 , ..., -0.9170025 ,\n",
       "         -0.7636802 ,  1.6815629 ],\n",
       "        [-2.4634213 ,  0.45704913, -0.07572711, ..., -0.7664566 ,\n",
       "          0.44797653,  0.02748227],\n",
       "        [ 2.0281813 , -0.3887902 , -0.5272015 , ..., -0.78118384,\n",
       "          0.01462882,  0.29456648]],\n",
       "\n",
       "       [[-1.7491972 , -0.9462222 , -0.1576081 , ..., -2.105762  ,\n",
       "          1.1271304 , -0.32350639],\n",
       "        [-0.519033  , -0.7018975 , -0.85497713, ...,  0.03053831,\n",
       "          0.2094574 , -1.687281  ],\n",
       "        [ 0.84420586,  0.26464254,  0.57411736, ...,  0.13680442,\n",
       "          0.43753403,  1.3279532 ],\n",
       "        ...,\n",
       "        [ 0.99644727,  0.05680068, -1.3570836 , ..., -0.15368403,\n",
       "          0.518027  , -0.8079081 ],\n",
       "        [-1.1284589 , -1.8705678 ,  1.3141084 , ...,  0.23156461,\n",
       "         -0.49804217, -1.3068371 ],\n",
       "        [ 0.31398556, -1.0150905 , -0.6340677 , ..., -0.6491545 ,\n",
       "         -0.19488569,  1.434632  ]],\n",
       "\n",
       "       [[ 0.35954127, -0.8319955 ,  1.0348824 , ...,  0.15702023,\n",
       "          0.07239006, -0.9589845 ],\n",
       "        [ 0.58393884, -1.8529595 , -0.25225535, ..., -2.4398935 ,\n",
       "         -0.8832046 ,  1.6298381 ],\n",
       "        [-0.58960974,  0.55573076, -0.10575121, ...,  0.940496  ,\n",
       "         -0.05622998,  0.9791834 ],\n",
       "        ...,\n",
       "        [ 0.19512591, -1.6065075 ,  1.3822824 , ...,  0.6038089 ,\n",
       "         -0.6141134 , -0.5812208 ],\n",
       "        [ 0.32934776,  0.302661  , -0.02367961, ..., -1.3443702 ,\n",
       "         -0.21636096,  0.45509294],\n",
       "        [-0.05100093, -1.063954  , -0.9817921 , ..., -0.09894503,\n",
       "         -0.53671926, -0.49010494]],\n",
       "\n",
       "       ...,\n",
       "\n",
       "       [[ 0.4759587 , -0.69328827, -1.0342325 , ..., -1.6959233 ,\n",
       "         -0.4252141 ,  0.2705423 ],\n",
       "        [-0.46308032, -0.8213688 , -0.16974686, ..., -0.9098841 ,\n",
       "          1.0915378 , -1.4417729 ],\n",
       "        [-0.8740996 ,  0.0184834 , -1.9489955 , ...,  0.6462826 ,\n",
       "          0.08389072, -0.38885695],\n",
       "        ...,\n",
       "        [ 0.8745598 , -0.40251625,  0.43608552, ...,  0.4855415 ,\n",
       "          0.8394594 ,  0.2597982 ],\n",
       "        [ 0.27145162,  0.47952077, -0.5943104 , ...,  1.1930935 ,\n",
       "         -0.8870093 ,  0.7601888 ],\n",
       "        [-1.1375165 ,  0.11641185, -2.8470783 , ..., -0.50759095,\n",
       "         -1.2072995 , -1.3229944 ]],\n",
       "\n",
       "       [[-1.0786335 ,  1.01108   ,  1.0565965 , ...,  0.4623936 ,\n",
       "         -2.0322824 , -1.2888185 ],\n",
       "        [ 0.64095575,  0.49575156, -0.748092  , ...,  1.0143075 ,\n",
       "         -1.7919227 ,  0.36071825],\n",
       "        [ 0.6677817 , -0.70891356,  0.3351992 , ...,  1.3591498 ,\n",
       "         -0.96730965, -0.1782212 ],\n",
       "        ...,\n",
       "        [-0.36856335,  1.6460855 ,  0.16839904, ...,  0.42088726,\n",
       "         -2.2080448 , -0.80759823],\n",
       "        [ 2.0783417 ,  0.41813704,  0.682075  , ...,  1.8983583 ,\n",
       "          1.1128964 ,  0.4164259 ],\n",
       "        [-0.418403  , -0.4535069 , -0.5209457 , ..., -1.0391972 ,\n",
       "          1.1302545 ,  0.4395642 ]],\n",
       "\n",
       "       [[ 0.66521776,  1.935903  , -0.6774901 , ...,  0.30551362,\n",
       "          0.46285257,  0.8596996 ],\n",
       "        [-0.3232773 , -0.7670456 , -0.31801862, ..., -0.44855148,\n",
       "         -1.7195648 , -0.229606  ],\n",
       "        [ 0.49741027,  0.8893042 , -0.65166783, ...,  1.764159  ,\n",
       "         -0.45581043, -1.1409253 ],\n",
       "        ...,\n",
       "        [ 0.15302044, -0.48563522,  0.48424405, ...,  0.08455211,\n",
       "          0.6946224 ,  0.6293123 ],\n",
       "        [-0.3557666 ,  0.6681541 , -1.9398662 , ..., -1.9926047 ,\n",
       "         -0.2553969 , -1.2358085 ],\n",
       "        [-1.3309376 ,  0.02168443, -0.42076382, ...,  0.4539127 ,\n",
       "         -0.1288669 , -0.84897196]]], dtype=float32)>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = tf.random.normal([10,35,4])\n",
    "b = tf.random.normal([10,35,4])\n",
    "# 在科目维度上拼接\n",
    "tf.concat([a,b],axis=2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ConcatOp : Dimensions of inputs should match: shape[0] = [4,32,8] vs. shape[1] = [6,35,8] [Op:ConcatV2] name: concat\n"
     ]
    }
   ],
   "source": [
    "a = tf.random.normal([4,32,8])\n",
    "b = tf.random.normal([6,35,8])\n",
    "try:\n",
    "    tf.concat([a,b],axis=0) # 非法拼接，其他维度长度不相同\n",
    "except Exception as ex:\n",
    "    print(ex)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 tf.stack(tensors, axis)可以堆叠方式合并多个张量，通过 tensors 列表表示， 参数 axis 指定新维度插入的位置， axis 的用法与 tf.expand_dims 的一致，当axis ≥ 0时，在 axis之前插入； 当axis < 0时，在 axis 之后插入新维度。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=53, shape=(2, 35, 8), dtype=float32, numpy=\n",
       "array([[[-5.40749133e-01,  1.58083476e-02,  2.94267721e-02,\n",
       "          3.67177635e-01, -2.37406865e-01, -7.60905445e-01,\n",
       "         -2.29212499e+00, -7.75705934e-01],\n",
       "        [ 1.11752838e-01, -1.13514280e+00, -4.84930426e-01,\n",
       "         -3.44208419e-01,  9.40503716e-01,  1.40077317e+00,\n",
       "         -5.02934873e-01,  4.10485864e-01],\n",
       "        [ 5.94958544e-01, -8.87149096e-01,  3.94559056e-01,\n",
       "          7.21593127e-02,  5.71714282e-01,  1.34427547e+00,\n",
       "          1.00393152e+00,  5.38403451e-01],\n",
       "        [ 2.62385875e-01,  5.38515210e-01, -8.00797462e-01,\n",
       "         -2.32194960e-01,  2.09922695e+00, -4.50407863e-01,\n",
       "         -7.43777528e-02,  2.00556660e+00],\n",
       "        [ 7.48052299e-01,  1.38348639e+00, -4.22931910e-01,\n",
       "         -2.83003956e-01,  6.82974041e-01, -1.79872841e-01,\n",
       "         -1.32842779e+00, -6.05283856e-01],\n",
       "        [-1.52707204e-01,  6.91095769e-01, -4.21667188e-01,\n",
       "         -4.85451579e-01,  9.46290717e-02, -3.31034362e-01,\n",
       "         -1.82989728e+00,  4.60377693e-01],\n",
       "        [ 9.33695912e-01, -4.13106769e-01, -1.29995966e+00,\n",
       "         -1.13114715e+00,  9.84824657e-01,  1.86728942e+00,\n",
       "          8.04332495e-01, -2.60491580e-01],\n",
       "        [-5.86737752e-01,  8.09874356e-01,  2.17881471e-01,\n",
       "          5.05648553e-01,  1.56525767e+00, -1.99963197e-01,\n",
       "         -1.19875193e+00,  9.02396560e-01],\n",
       "        [-6.10047221e-01,  1.80700459e-02,  6.94103956e-01,\n",
       "          2.37121439e+00, -2.69412923e+00,  1.51464522e+00,\n",
       "          1.69144630e+00,  2.31935661e-02],\n",
       "        [ 1.01915789e+00, -5.35324156e-01, -2.39039540e+00,\n",
       "          1.33234811e+00, -4.92419779e-01,  3.58536690e-01,\n",
       "          9.50430334e-01,  1.68604836e-01],\n",
       "        [ 1.22362696e-01,  8.95090282e-01,  1.57628667e+00,\n",
       "          1.26107514e-01,  2.87894279e-01, -6.57617986e-01,\n",
       "         -7.75165200e-01,  7.61913359e-02],\n",
       "        [ 2.79217027e-03, -1.16059995e+00,  7.87919581e-01,\n",
       "          8.36801827e-01,  1.25229567e-01, -4.93586987e-01,\n",
       "          4.38048959e-01, -1.25035977e+00],\n",
       "        [-1.04927421e+00,  8.10328007e-01,  1.50147647e-01,\n",
       "         -1.57850289e+00,  3.45840305e-01,  4.94985998e-01,\n",
       "         -8.42979014e-01, -3.91290784e-02],\n",
       "        [-1.63924977e-01, -1.17738140e+00,  1.13547707e+00,\n",
       "          1.08805263e+00,  5.85444212e-01, -1.18547165e+00,\n",
       "          1.02158260e+00,  1.22601306e+00],\n",
       "        [ 3.83346230e-01, -2.93949693e-01,  7.75610507e-02,\n",
       "         -9.59040999e-01, -7.32486486e-01,  1.34138107e+00,\n",
       "         -4.99979183e-02, -1.78677392e+00],\n",
       "        [-3.00181746e-01,  8.81464109e-02, -2.75506318e-01,\n",
       "          4.13226247e-01,  3.54875326e-01,  3.73012796e-02,\n",
       "          4.12636697e-01, -7.95901000e-01],\n",
       "        [ 1.48117745e+00, -3.57293159e-01, -6.33150995e-01,\n",
       "          1.55184317e+00,  6.52459919e-01,  6.66434824e-01,\n",
       "         -3.88685763e-02,  1.37407207e+00],\n",
       "        [-6.58864260e-01,  1.27849936e+00, -8.34819973e-01,\n",
       "          6.64095819e-01,  5.12459695e-01,  9.83584821e-01,\n",
       "         -7.80866921e-01, -1.53951156e+00],\n",
       "        [ 4.45533663e-01, -9.54431355e-01, -3.75303447e-01,\n",
       "         -8.02376211e-01, -5.40796399e-01,  1.03669536e+00,\n",
       "          2.05952954e+00,  1.21598423e+00],\n",
       "        [ 4.61323291e-01,  2.07292929e-01, -1.77817553e-01,\n",
       "         -9.41754282e-02, -8.11869979e-01,  3.86877090e-01,\n",
       "         -2.51570702e-01, -1.81514168e+00],\n",
       "        [ 9.90575790e-01, -6.30490899e-01,  1.54439771e+00,\n",
       "         -9.65862215e-01,  9.90826339e-02, -1.08964527e+00,\n",
       "         -6.44329667e-01, -2.15627480e+00],\n",
       "        [-1.69862843e+00, -6.20880246e-01, -2.59225190e-01,\n",
       "          5.41691422e-01, -1.89325470e-03, -8.29562068e-01,\n",
       "          3.78060162e-01,  1.42515406e-01],\n",
       "        [-6.72530234e-01, -9.04840231e-01,  5.37518919e-01,\n",
       "         -6.57667398e-01,  8.08197975e-01,  2.36651361e-01,\n",
       "         -6.73193216e-01,  2.04732656e+00],\n",
       "        [ 9.96475160e-01, -3.67133945e-01, -5.74881852e-01,\n",
       "          1.16108704e+00,  8.90700936e-01,  1.09252179e+00,\n",
       "         -3.68687987e-01,  1.77881896e-01],\n",
       "        [ 9.02747214e-01, -8.97608623e-02,  9.97401848e-02,\n",
       "          1.86399376e+00, -1.59232214e-01, -6.88062191e-01,\n",
       "          1.89379132e+00, -1.56480122e+00],\n",
       "        [-6.89025700e-01,  3.59579146e-01,  1.36661577e+00,\n",
       "         -1.77798882e-01,  9.03711021e-01, -5.09101987e-01,\n",
       "          9.97568309e-01, -8.33947778e-01],\n",
       "        [-2.96917371e-02, -1.47488760e-03,  1.43658900e+00,\n",
       "         -8.01943243e-01,  2.50692755e-01,  4.25118059e-01,\n",
       "          2.40848914e-01, -7.52575248e-02],\n",
       "        [ 3.85668933e-01,  6.57931805e-01,  2.37769827e-01,\n",
       "         -1.29147744e+00, -4.16781932e-01,  2.56563090e-02,\n",
       "         -9.61239859e-02,  1.32856512e+00],\n",
       "        [-1.28078687e+00,  4.29795384e-02, -9.41599667e-01,\n",
       "          1.17595397e-01, -1.12243664e+00,  8.02996755e-01,\n",
       "         -2.81020689e+00,  1.30415833e+00],\n",
       "        [-1.51471186e+00,  4.30213004e-01, -4.63135205e-02,\n",
       "          3.34461510e-01, -5.46414554e-01,  9.15552020e-01,\n",
       "          1.29420006e+00, -9.02637914e-02],\n",
       "        [-3.39288175e-01, -4.02155131e-01,  4.64612514e-01,\n",
       "          1.13848233e+00,  1.60849953e+00, -1.62095532e-01,\n",
       "         -3.15968126e-01, -1.95937634e+00],\n",
       "        [-3.04158002e-01,  5.34258075e-02, -1.09648846e-01,\n",
       "         -2.18036488e-01, -8.22803795e-01, -1.09660435e+00,\n",
       "         -1.93301290e-01, -5.90025485e-01],\n",
       "        [ 7.88611114e-01, -4.22510058e-01,  3.39028776e-01,\n",
       "          4.76571947e-01, -6.99784830e-02, -1.77641481e-01,\n",
       "         -1.07638288e+00, -2.56566405e-01],\n",
       "        [ 1.35811377e+00, -3.33501399e-01,  2.75480747e-01,\n",
       "          1.10171605e-02,  8.36676002e-01,  3.37571740e-01,\n",
       "         -2.43482981e-02,  2.16542506e+00],\n",
       "        [-2.80188322e-01,  8.82201731e-01, -5.22830725e-01,\n",
       "         -5.29673755e-01,  1.90230310e-01,  1.28651798e+00,\n",
       "          1.41285276e+00, -2.03152522e-01]],\n",
       "\n",
       "       [[-2.63120592e-01,  2.67796516e-01, -4.76463616e-01,\n",
       "          2.75663473e-02,  2.27204084e+00, -8.21294069e-01,\n",
       "          7.44492233e-01,  6.54482543e-01],\n",
       "        [-4.21039194e-01, -3.32571328e-01,  1.84887075e+00,\n",
       "         -8.51332307e-01, -4.91194844e-01, -4.75199312e-01,\n",
       "         -7.63238907e-01, -2.29679346e+00],\n",
       "        [-3.22208017e-01,  9.03567970e-01,  8.47331464e-01,\n",
       "          1.27382827e+00,  4.33937132e-01, -1.31692052e+00,\n",
       "         -5.68058516e-04,  1.05567768e-01],\n",
       "        [-6.89733326e-01, -5.65245867e-01,  4.91549700e-01,\n",
       "         -1.84725285e-01,  3.51662219e-01, -1.04886138e+00,\n",
       "          1.94229633e-01,  4.18155551e-01],\n",
       "        [-2.62469023e-01,  2.77786136e-01, -5.99502742e-01,\n",
       "          7.68032789e-01,  2.37558067e-01, -6.13180101e-01,\n",
       "         -2.60879183e+00,  3.57264727e-01],\n",
       "        [-5.69836855e-01,  1.23606706e+00, -3.93678099e-01,\n",
       "         -1.04962087e+00,  2.86260396e-01,  1.94459009e+00,\n",
       "          1.87775418e-01,  2.64945269e-01],\n",
       "        [ 5.72858751e-02, -7.90001929e-01, -6.67164661e-03,\n",
       "         -6.14601791e-01, -8.48438084e-01, -1.02253282e+00,\n",
       "          1.27114320e+00, -4.34571475e-01],\n",
       "        [ 4.39045399e-01,  1.44832671e+00, -2.03528380e+00,\n",
       "         -8.21038723e-01,  7.58098006e-01,  8.50689188e-02,\n",
       "          2.15543643e-01,  4.80136096e-01],\n",
       "        [-1.48131227e+00, -1.12148680e-01,  8.79842043e-01,\n",
       "         -2.09795505e-01, -2.14172658e-02,  8.50606799e-01,\n",
       "         -5.21669388e-02,  1.39121997e+00],\n",
       "        [ 1.91396093e+00, -1.78638712e-01,  1.42919749e-01,\n",
       "         -7.14450143e-03, -1.38655317e+00,  1.99849665e+00,\n",
       "         -1.14661348e+00,  2.28228974e+00],\n",
       "        [-1.48799622e+00, -1.28993139e-01, -1.88203251e+00,\n",
       "          7.98636317e-01,  1.07512109e-01,  1.68152225e+00,\n",
       "         -1.37135088e+00, -2.46097937e-01],\n",
       "        [ 6.85419261e-01,  2.67707539e+00, -1.50242552e-01,\n",
       "          1.66912901e+00,  1.74643242e+00, -1.70349598e+00,\n",
       "         -3.28575253e-01,  1.17580867e+00],\n",
       "        [ 1.06326222e+00, -2.88761950e+00, -1.08707762e+00,\n",
       "         -1.31724346e+00, -2.61965424e-01, -1.98560226e+00,\n",
       "          2.05252147e+00, -9.98080432e-01],\n",
       "        [ 1.24867693e-01, -1.08707273e+00, -5.37859462e-02,\n",
       "          1.06417823e+00, -2.80660748e-01,  1.27912605e+00,\n",
       "         -1.14050686e-01, -4.04230244e-02],\n",
       "        [ 1.43207979e+00,  1.54919231e+00, -1.22078121e+00,\n",
       "          1.26223159e+00,  2.94783831e-01,  3.31325203e-01,\n",
       "          4.00451496e-02,  9.05976236e-01],\n",
       "        [-7.83246100e-01,  5.00583768e-01, -1.03303206e+00,\n",
       "          9.37492549e-01,  5.03750324e-01,  1.07818317e+00,\n",
       "         -2.71961540e-01, -8.27463567e-01],\n",
       "        [-3.90489310e-01,  8.84383261e-01,  4.64397222e-01,\n",
       "          6.36478901e-01,  9.35833216e-01,  2.30210334e-01,\n",
       "          2.72570759e-01, -1.83217013e+00],\n",
       "        [ 4.88194466e-01,  6.08751535e-01, -3.76273960e-01,\n",
       "          8.92741799e-01,  1.13936734e+00, -3.14578712e-01,\n",
       "         -1.10494688e-01, -2.22428322e+00],\n",
       "        [ 8.30742836e-01,  8.14285502e-03,  2.41473451e-01,\n",
       "         -9.77825880e-01, -6.90010265e-02,  1.48274624e+00,\n",
       "         -3.14318269e-01,  4.02855664e-01],\n",
       "        [ 8.11873972e-01,  2.52931023e+00, -2.58354098e-03,\n",
       "          1.06494856e+00,  1.52159348e-01, -3.74520600e-01,\n",
       "          1.63256919e+00, -8.61625254e-01],\n",
       "        [-1.23361492e+00, -2.18361139e+00, -2.14658213e+00,\n",
       "         -8.87168169e-01, -1.44591117e+00, -6.71373308e-01,\n",
       "         -5.11546552e-01,  1.48433730e-01],\n",
       "        [ 5.02605259e-01,  1.48418605e+00,  2.38968760e-01,\n",
       "         -3.44995290e-01,  6.54182494e-01,  8.70162487e-01,\n",
       "          3.51125509e-01, -9.72861722e-02],\n",
       "        [ 1.41620696e+00, -3.86896968e-01, -5.65556288e-01,\n",
       "         -1.25770390e+00,  4.03980792e-01, -3.26931447e-01,\n",
       "          1.10770798e+00, -1.94624472e+00],\n",
       "        [-1.11599982e+00,  8.59564424e-01,  1.12179577e+00,\n",
       "          1.81535816e+00,  5.01313329e-01, -2.30711833e-01,\n",
       "         -7.44207278e-02, -1.99554729e+00],\n",
       "        [ 1.25685084e+00, -1.47837412e+00, -1.46554041e+00,\n",
       "         -2.52895445e-01, -2.13678932e+00,  1.36834061e+00,\n",
       "         -4.06102210e-01,  1.40526104e+00],\n",
       "        [ 1.41321528e+00, -1.16661942e+00,  1.47831178e+00,\n",
       "          6.20939732e-01, -1.39567399e+00,  9.37597275e-01,\n",
       "         -3.27768266e-01, -8.53849292e-01],\n",
       "        [ 1.28929555e-01,  1.23854256e+00,  9.08855915e-01,\n",
       "          2.13664904e-01,  6.36277437e-01, -4.61261928e-01,\n",
       "         -1.13447636e-01, -6.00030482e-01],\n",
       "        [ 1.11234748e+00, -5.68531752e-01, -2.79850578e+00,\n",
       "         -1.12439632e+00,  5.98260164e-01, -1.66980177e-02,\n",
       "          1.51149696e-02,  1.34106243e+00],\n",
       "        [-8.03276375e-02,  1.17763424e+00, -1.27406192e+00,\n",
       "          1.82983029e+00, -8.81541908e-01, -1.37232959e-01,\n",
       "          1.08723950e+00, -3.59865516e-01],\n",
       "        [ 8.78080130e-02, -2.31631264e-01, -1.04380548e+00,\n",
       "         -5.98941803e-01, -2.87932664e-01,  2.68154478e+00,\n",
       "          9.93210435e-01,  3.45993042e-01],\n",
       "        [-1.64458764e+00, -1.35490179e+00, -6.13683701e-01,\n",
       "          1.86355695e-01,  5.34002960e-01, -2.99009115e-01,\n",
       "          8.94853175e-02, -5.26978731e-01],\n",
       "        [ 1.18228042e+00, -9.66481447e-01,  1.26294923e+00,\n",
       "         -8.35777000e-02,  1.29099876e-01, -2.96232373e-01,\n",
       "         -3.94565672e-01, -1.46110404e+00],\n",
       "        [-1.44339895e+00, -1.84465766e+00, -6.82766140e-02,\n",
       "          5.34972847e-01,  8.07870090e-01, -1.41187534e-01,\n",
       "          3.83643359e-01, -5.49720407e-01],\n",
       "        [-1.87519267e-01, -4.45581853e-01, -4.30266082e-01,\n",
       "         -4.32895601e-01,  1.70496809e+00,  1.95800096e-01,\n",
       "          2.97171660e-02,  3.24856550e-01],\n",
       "        [-8.81968021e-01,  4.62380618e-01, -1.98420852e-01,\n",
       "         -5.59259236e-01,  2.41586030e-01,  2.34395593e-01,\n",
       "          1.33081985e+00, -5.78349054e-01]]], dtype=float32)>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = tf.random.normal([35,8])\n",
    "b = tf.random.normal([35,8])\n",
    "# 堆叠合并为 2 个班级，班级维度插入在最前\n",
    "tf.stack([a,b],axis=0) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "同样可以选择在其他位置插入新维度， 例如， 最末尾插入班级维度:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=66, shape=(35, 8, 2), dtype=float32, numpy=\n",
       "array([[[ 0.05329738, -1.5902457 ],\n",
       "        [ 0.34755418,  1.0161575 ],\n",
       "        [ 1.1029378 , -1.4891272 ],\n",
       "        [ 1.1358268 ,  0.2086796 ],\n",
       "        [-0.06011174, -0.22369973],\n",
       "        [-0.19199233, -1.6741587 ],\n",
       "        [-0.6693648 , -1.6227504 ],\n",
       "        [ 0.14199488,  0.5597819 ]],\n",
       "\n",
       "       [[-0.3402484 , -0.09277528],\n",
       "        [-0.10369706, -1.2860553 ],\n",
       "        [ 1.9067492 ,  0.2987942 ],\n",
       "        [-0.39461446,  0.700922  ],\n",
       "        [-1.0737535 ,  1.6325126 ],\n",
       "        [ 0.12472707, -0.47413707],\n",
       "        [ 0.942566  ,  1.4239129 ],\n",
       "        [-1.6954707 , -0.23716962]],\n",
       "\n",
       "       [[-0.6767195 ,  0.25784308],\n",
       "        [ 0.07648886,  0.5369944 ],\n",
       "        [-0.7067332 , -0.35340422],\n",
       "        [ 0.87172633, -1.1379769 ],\n",
       "        [-0.38617182, -1.6110011 ],\n",
       "        [-0.60634166, -0.978938  ],\n",
       "        [-1.507075  ,  0.6261872 ],\n",
       "        [ 0.83598757,  0.12538111]],\n",
       "\n",
       "       [[ 0.76666176, -0.99897456],\n",
       "        [ 0.97871125,  0.94528997],\n",
       "        [-0.3547069 ,  0.31633613],\n",
       "        [-2.8910928 , -0.1672466 ],\n",
       "        [-0.3622531 ,  0.66201997],\n",
       "        [ 0.98765343, -0.6864613 ],\n",
       "        [-0.42405632, -1.0210209 ],\n",
       "        [ 0.5128244 ,  0.28944367]],\n",
       "\n",
       "       [[ 1.5385753 , -0.57667905],\n",
       "        [-0.59545946,  0.10798791],\n",
       "        [ 0.21080361,  1.0090603 ],\n",
       "        [ 0.7832027 , -0.37718463],\n",
       "        [-0.8316176 ,  0.354469  ],\n",
       "        [-1.1809906 , -0.883731  ],\n",
       "        [-1.4338057 , -1.0139669 ],\n",
       "        [-0.6405477 ,  0.24667646]],\n",
       "\n",
       "       [[ 0.04171163,  0.6809587 ],\n",
       "        [-0.43196517,  1.7727095 ],\n",
       "        [ 1.0245926 , -0.61126417],\n",
       "        [ 0.7125546 ,  1.5199258 ],\n",
       "        [ 0.429364  ,  0.65595806],\n",
       "        [-1.9078329 ,  0.06204787],\n",
       "        [-0.22379299, -0.43452835],\n",
       "        [ 0.71586895, -0.69358706]],\n",
       "\n",
       "       [[ 0.2738719 ,  0.61628294],\n",
       "        [ 1.1003207 ,  0.14411536],\n",
       "        [ 0.14049923, -0.27569258],\n",
       "        [-0.79314846,  2.0436559 ],\n",
       "        [ 0.9400918 ,  0.7129087 ],\n",
       "        [ 0.06867419, -0.54702795],\n",
       "        [-0.00342497, -1.3285668 ],\n",
       "        [ 1.2661968 ,  0.0049826 ]],\n",
       "\n",
       "       [[ 0.36449882,  1.8630071 ],\n",
       "        [ 0.20581037,  0.6832689 ],\n",
       "        [ 0.47381866,  1.0557193 ],\n",
       "        [ 0.64956516, -0.7622308 ],\n",
       "        [-0.62195677,  0.2499247 ],\n",
       "        [ 0.3591952 ,  0.22564274],\n",
       "        [ 0.8941724 ,  0.03878671],\n",
       "        [ 0.35888413,  0.503479  ]],\n",
       "\n",
       "       [[ 1.1812164 ,  0.22087029],\n",
       "        [ 0.06015987,  0.71681684],\n",
       "        [ 1.1084552 ,  0.34570462],\n",
       "        [-1.1831629 ,  0.12052924],\n",
       "        [ 0.16890208, -0.11283091],\n",
       "        [-3.1068091 ,  0.42667222],\n",
       "        [-0.7700447 ,  0.6608686 ],\n",
       "        [ 0.19179954,  0.15623139]],\n",
       "\n",
       "       [[ 0.6699836 , -0.01747654],\n",
       "        [ 0.6936192 ,  0.7088051 ],\n",
       "        [-2.6289551 ,  0.11147612],\n",
       "        [-0.8007807 , -0.43699673],\n",
       "        [-0.72872174, -2.0584466 ],\n",
       "        [ 0.52945244,  0.36688974],\n",
       "        [ 0.96499574,  0.11878853],\n",
       "        [-1.5878865 ,  0.45392895]],\n",
       "\n",
       "       [[-0.6490879 ,  0.76846546],\n",
       "        [ 0.05010908, -0.11530738],\n",
       "        [-0.58856565, -0.9134883 ],\n",
       "        [-1.1135913 ,  0.5228296 ],\n",
       "        [-0.46350005,  0.5646552 ],\n",
       "        [-0.90089893,  0.9042069 ],\n",
       "        [-0.77642095,  0.6609176 ],\n",
       "        [-0.21029961, -0.36075094]],\n",
       "\n",
       "       [[ 0.41232735, -0.27777025],\n",
       "        [ 0.08912713, -0.16352956],\n",
       "        [-0.40697393,  1.5671601 ],\n",
       "        [-1.0401055 , -1.184801  ],\n",
       "        [-2.4018779 , -0.05824029],\n",
       "        [-0.65443134, -0.41395   ],\n",
       "        [-0.7590793 , -2.1037333 ],\n",
       "        [ 0.3232743 , -2.7608025 ]],\n",
       "\n",
       "       [[-0.10817892,  1.3281097 ],\n",
       "        [ 0.3316406 ,  0.24012722],\n",
       "        [-2.9710455 ,  0.5525824 ],\n",
       "        [-1.0050524 , -0.33243158],\n",
       "        [-1.1077513 ,  0.04905298],\n",
       "        [-0.71517116, -0.6673186 ],\n",
       "        [-0.7074558 , -1.1777697 ],\n",
       "        [ 0.16459602,  1.1174332 ]],\n",
       "\n",
       "       [[-0.05708239,  0.6880843 ],\n",
       "        [ 0.5840429 , -0.4395794 ],\n",
       "        [ 0.80793524,  1.424717  ],\n",
       "        [-1.7785941 , -0.64469665],\n",
       "        [-0.37393707, -0.05289145],\n",
       "        [-0.5827129 ,  1.2025038 ],\n",
       "        [-0.20607756,  0.8649131 ],\n",
       "        [ 0.14721793,  1.0671679 ]],\n",
       "\n",
       "       [[ 0.5826861 , -1.0912585 ],\n",
       "        [ 1.2257593 , -0.7718131 ],\n",
       "        [ 0.55789965,  1.5868837 ],\n",
       "        [-0.24275477, -0.32868502],\n",
       "        [-0.13820662,  1.592842  ],\n",
       "        [-0.22011004,  0.17631556],\n",
       "        [-1.4047879 , -1.0599577 ],\n",
       "        [-1.1659011 ,  0.268667  ]],\n",
       "\n",
       "       [[-0.13150135,  0.04574291],\n",
       "        [ 1.2146822 , -0.4963263 ],\n",
       "        [-1.1972541 ,  0.91191596],\n",
       "        [ 0.09842568,  0.7501658 ],\n",
       "        [-0.87064207, -2.0406787 ],\n",
       "        [ 0.02883223, -1.3996359 ],\n",
       "        [-1.358803  , -0.5458954 ],\n",
       "        [-0.36381584, -0.31785718]],\n",
       "\n",
       "       [[-0.04206031,  0.18945578],\n",
       "        [-1.0159127 ,  0.8961645 ],\n",
       "        [-0.6090656 , -1.2454497 ],\n",
       "        [ 0.04812302, -0.56310034],\n",
       "        [ 2.14778   , -0.20731397],\n",
       "        [ 0.13007706, -0.48137903],\n",
       "        [-1.3257358 , -0.6625995 ],\n",
       "        [-0.53126055,  0.91959673]],\n",
       "\n",
       "       [[-0.26300892, -1.4074258 ],\n",
       "        [ 0.64715964,  0.07957192],\n",
       "        [ 1.7141948 , -1.314158  ],\n",
       "        [ 1.2092785 , -0.11955445],\n",
       "        [-0.2698851 ,  0.9312687 ],\n",
       "        [-0.40981808,  1.492953  ],\n",
       "        [ 0.296111  , -0.4512707 ],\n",
       "        [ 0.67761475,  1.401849  ]],\n",
       "\n",
       "       [[ 2.8799484 ,  0.69013876],\n",
       "        [ 0.6147717 ,  0.85052943],\n",
       "        [-1.0910852 ,  1.5081412 ],\n",
       "        [ 0.86546236,  0.5367652 ],\n",
       "        [-1.8446088 , -0.18831035],\n",
       "        [ 1.1744237 , -1.0599451 ],\n",
       "        [ 0.48843086,  0.9698162 ],\n",
       "        [-0.13232055, -0.27293494]],\n",
       "\n",
       "       [[-0.2861464 ,  1.7484405 ],\n",
       "        [-0.03179666, -0.7688724 ],\n",
       "        [-2.2361913 ,  1.2817523 ],\n",
       "        [-0.899515  ,  0.71116984],\n",
       "        [ 0.32277983, -0.42761377],\n",
       "        [-1.105993  ,  0.78825784],\n",
       "        [-1.8118099 , -0.48268545],\n",
       "        [-1.0755031 , -0.41434443]],\n",
       "\n",
       "       [[ 0.5759331 , -0.15532333],\n",
       "        [ 1.5678118 , -0.85222995],\n",
       "        [-1.1525353 ,  1.000532  ],\n",
       "        [-1.1188807 ,  1.1002282 ],\n",
       "        [ 0.66915804,  1.7093683 ],\n",
       "        [ 0.05339184, -1.7181565 ],\n",
       "        [-0.0480184 , -1.1817504 ],\n",
       "        [ 0.61258245, -1.6153939 ]],\n",
       "\n",
       "       [[-0.39267063,  1.7897295 ],\n",
       "        [-0.18331823,  0.12054831],\n",
       "        [-0.14260821, -0.76955986],\n",
       "        [ 1.8211381 ,  0.23663837],\n",
       "        [-0.10844401,  0.01273913],\n",
       "        [-0.12931079, -0.2583079 ],\n",
       "        [ 0.41364747,  0.92075294],\n",
       "        [ 2.921381  ,  0.85394406]],\n",
       "\n",
       "       [[-1.1347665 , -0.2999267 ],\n",
       "        [-0.5121885 , -1.4938111 ],\n",
       "        [ 1.4652619 , -0.17955792],\n",
       "        [ 0.7863638 ,  0.6975188 ],\n",
       "        [ 0.87370723,  1.0298448 ],\n",
       "        [ 0.08313033, -1.3809282 ],\n",
       "        [-0.09419842,  0.56779474],\n",
       "        [ 0.6068135 ,  1.213845  ]],\n",
       "\n",
       "       [[ 0.44819805,  0.9452181 ],\n",
       "        [-0.7946613 , -0.45943013],\n",
       "        [ 1.3485842 ,  1.4647363 ],\n",
       "        [-1.119391  , -0.7027    ],\n",
       "        [-0.29190016, -0.5273223 ],\n",
       "        [-0.43063897,  1.4845402 ],\n",
       "        [-0.5240157 , -0.30678868],\n",
       "        [-1.1366216 ,  0.52025396]],\n",
       "\n",
       "       [[ 0.32103956,  1.1935188 ],\n",
       "        [-1.7716078 ,  1.4322182 ],\n",
       "        [-0.236853  ,  0.43581343],\n",
       "        [-0.4516454 ,  0.8084572 ],\n",
       "        [-0.8310296 ,  1.1391479 ],\n",
       "        [ 0.0411839 , -1.9747891 ],\n",
       "        [-1.0358409 , -1.7296509 ],\n",
       "        [ 1.3584943 ,  0.36489066]],\n",
       "\n",
       "       [[-0.21355386, -0.04279328],\n",
       "        [ 0.4722121 ,  0.41891393],\n",
       "        [-0.9358008 ,  3.1471152 ],\n",
       "        [ 0.8007652 ,  1.8542701 ],\n",
       "        [ 0.10150518, -0.36052802],\n",
       "        [ 1.736777  ,  0.7595884 ],\n",
       "        [ 0.06092422,  0.25019374],\n",
       "        [-0.33442745, -0.12087449]],\n",
       "\n",
       "       [[-1.5349754 , -1.7939287 ],\n",
       "        [-0.02824628,  0.08743665],\n",
       "        [ 0.40554833,  1.0455031 ],\n",
       "        [-1.8011726 , -0.96209204],\n",
       "        [ 0.39821756, -0.88114077],\n",
       "        [-0.71052116,  0.7316439 ],\n",
       "        [-0.52910054,  0.88013864],\n",
       "        [-1.8117629 ,  0.48446852]],\n",
       "\n",
       "       [[-0.9393522 , -1.6837364 ],\n",
       "        [-1.5174879 ,  0.10927569],\n",
       "        [ 0.10368687, -0.36952323],\n",
       "        [-1.0798913 , -0.11473266],\n",
       "        [ 1.1927665 , -0.63768774],\n",
       "        [ 0.18687199,  2.3448133 ],\n",
       "        [-0.8924044 , -0.6122702 ],\n",
       "        [ 0.14576042,  0.37394843]],\n",
       "\n",
       "       [[-0.52848023,  0.5237943 ],\n",
       "        [ 1.0393562 ,  0.27261552],\n",
       "        [-0.5262888 , -0.5283449 ],\n",
       "        [-0.5017597 ,  1.4420224 ],\n",
       "        [-1.448993  , -1.0346429 ],\n",
       "        [ 0.16776726,  1.0000157 ],\n",
       "        [-2.0768888 ,  1.5464281 ],\n",
       "        [-0.64899665,  0.93445885]],\n",
       "\n",
       "       [[ 1.5143942 , -1.0105419 ],\n",
       "        [-1.8255647 , -0.4255236 ],\n",
       "        [ 0.01466867, -0.17911357],\n",
       "        [-0.08445722, -0.2552628 ],\n",
       "        [ 1.101059  ,  0.6923027 ],\n",
       "        [ 0.8476543 , -0.8449428 ],\n",
       "        [ 0.08709367, -1.0073262 ],\n",
       "        [ 2.3303454 ,  0.08853476]],\n",
       "\n",
       "       [[ 0.35031024,  0.86910075],\n",
       "        [-0.56688106,  0.7683618 ],\n",
       "        [-1.1693294 ,  0.16705784],\n",
       "        [ 0.9995135 ,  0.507923  ],\n",
       "        [ 0.46005675,  0.00619185],\n",
       "        [ 1.1301903 , -1.9511039 ],\n",
       "        [ 0.86413074,  0.8791828 ],\n",
       "        [ 0.9561121 ,  1.4371841 ]],\n",
       "\n",
       "       [[ 1.9166952 , -0.44631818],\n",
       "        [-1.1707778 , -0.21541168],\n",
       "        [ 1.0556662 , -0.15836085],\n",
       "        [ 0.84365815, -0.8210392 ],\n",
       "        [ 0.04353257, -1.5565675 ],\n",
       "        [ 0.5578053 ,  0.37361422],\n",
       "        [ 0.42375273, -1.2242283 ],\n",
       "        [-0.82951385,  0.18841761]],\n",
       "\n",
       "       [[ 0.8966353 , -0.10799969],\n",
       "        [-0.35648578, -1.5329453 ],\n",
       "        [ 0.79725397, -1.714092  ],\n",
       "        [-0.3656128 ,  0.763639  ],\n",
       "        [-0.4183076 , -0.27418277],\n",
       "        [ 0.11763957, -0.47429663],\n",
       "        [-0.94312906, -2.2363625 ],\n",
       "        [ 1.9184811 , -0.47591692]],\n",
       "\n",
       "       [[-0.3540652 , -0.1940212 ],\n",
       "        [ 0.14377828, -0.45308837],\n",
       "        [ 0.5608777 , -0.91496086],\n",
       "        [-0.05771695, -0.10533734],\n",
       "        [-0.00381469, -0.46827272],\n",
       "        [ 1.4618139 , -0.3618951 ],\n",
       "        [ 1.056075  ,  0.6946229 ],\n",
       "        [-0.62320936,  0.46178934]],\n",
       "\n",
       "       [[ 0.42779675, -1.2871889 ],\n",
       "        [-0.6131567 ,  0.90579677],\n",
       "        [ 3.1067557 ,  1.7449957 ],\n",
       "        [ 1.3581178 , -0.12005366],\n",
       "        [ 0.7055558 ,  1.0930188 ],\n",
       "        [-1.2564423 ,  0.21347126],\n",
       "        [ 0.9674974 , -0.29504034],\n",
       "        [ 0.6702501 , -1.7719781 ]]], dtype=float32)>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在末尾插入班级维度\n",
    "a = tf.random.normal([35,8])\n",
    "b = tf.random.normal([35,8])\n",
    "tf.stack([a,b],axis=-1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=80, shape=(70, 8), dtype=float32, numpy=\n",
       "array([[-4.62260306e-01,  3.96053374e-01, -6.26502037e-02,\n",
       "         7.07266748e-01,  2.05548014e-02, -3.07566851e-01,\n",
       "        -1.14867091e-01,  1.25847912e+00],\n",
       "       [-3.49050164e-01, -1.66524398e+00,  3.12228411e-01,\n",
       "        -2.83631999e-02,  1.05168200e+00, -4.17700827e-01,\n",
       "         1.52536288e-01,  3.58153641e-01],\n",
       "       [-1.51067242e-01, -1.97077960e-01,  1.06789458e+00,\n",
       "         7.99158990e-01,  8.65638673e-01,  9.71890613e-03,\n",
       "        -1.81216943e+00,  5.53519428e-01],\n",
       "       [ 1.35795414e+00,  1.91918984e-01,  5.08838892e-01,\n",
       "         3.99554998e-01, -4.55968708e-01, -1.04949391e+00,\n",
       "         8.36262286e-01, -5.28228700e-01],\n",
       "       [-1.39828885e+00, -1.42594948e-01,  2.02388540e-01,\n",
       "         1.17670429e+00, -6.61540568e-01,  1.37689531e-01,\n",
       "         9.69990432e-01, -3.94727383e-03],\n",
       "       [ 9.30748880e-01, -2.31615305e+00, -9.48968112e-01,\n",
       "        -4.75304782e-01, -7.92504847e-01, -5.20290315e-01,\n",
       "        -2.10015610e-01,  1.56681323e+00],\n",
       "       [-6.80754840e-01,  1.21273184e+00, -1.46331477e+00,\n",
       "         3.16658229e-01,  4.23459858e-01,  2.38763407e-01,\n",
       "        -1.08552027e+00, -2.80374050e-01],\n",
       "       [-6.21086955e-01,  2.18257999e+00,  5.88099480e-01,\n",
       "         1.63524401e+00,  4.93016332e-01,  3.85169178e-01,\n",
       "         7.26625443e-01,  6.47498846e-01],\n",
       "       [ 7.65057325e-01,  1.19748795e+00,  1.53891873e-02,\n",
       "         6.19547009e-01,  6.23968780e-01,  9.65783000e-01,\n",
       "         5.30469269e-02,  8.68173063e-01],\n",
       "       [-6.33265972e-01, -1.10271551e-01, -3.56348529e-02,\n",
       "        -1.65415502e+00,  1.31907785e+00,  3.62424850e-01,\n",
       "        -9.60701287e-01,  6.12540245e-02],\n",
       "       [-3.13059151e-01,  1.41157377e+00, -8.17840576e-01,\n",
       "         6.58108175e-01, -7.41924286e-01,  3.98569435e-01,\n",
       "         1.21248402e-01, -1.43976963e+00],\n",
       "       [-1.82438523e-01, -1.59077573e+00, -2.82475185e+00,\n",
       "         4.24400300e-01, -2.68631864e+00, -1.54905629e+00,\n",
       "         4.55698311e-01,  1.94389009e+00],\n",
       "       [-1.40119970e+00,  6.50800228e-01,  1.07914992e-01,\n",
       "        -8.68966937e-01,  8.61216784e-01, -5.37252307e-01,\n",
       "        -1.51105320e+00,  2.55210042e-01],\n",
       "       [-1.48336494e+00,  3.41682822e-01, -1.54421556e+00,\n",
       "         1.06545973e+00, -1.98114976e-01,  2.09697075e-02,\n",
       "         5.36663592e-01,  9.96924639e-01],\n",
       "       [-2.97056049e-01,  8.33312571e-02, -7.69180775e-01,\n",
       "        -7.19397962e-01,  8.18442330e-02,  4.47536021e-01,\n",
       "         8.45561445e-01,  6.04910254e-01],\n",
       "       [-3.79292816e-01, -2.23917937e+00,  2.24991739e-01,\n",
       "        -1.64179087e-01,  8.35566446e-02, -8.13447475e-01,\n",
       "         5.58009744e-01,  3.21106523e-01],\n",
       "       [-4.67800230e-01,  1.15632586e-01, -5.95065594e-01,\n",
       "        -3.77140969e-01, -9.55806613e-01,  3.25486124e-01,\n",
       "         1.21246207e+00,  3.66406351e-01],\n",
       "       [ 6.34005904e-01,  1.52061963e+00,  3.56964737e-01,\n",
       "         3.11027318e-01,  1.51765656e+00, -5.00391543e-01,\n",
       "        -1.10174274e+00, -7.68442690e-01],\n",
       "       [ 3.12944539e-02,  2.39927030e+00,  9.44480300e-01,\n",
       "         1.16754413e+00, -2.10794044e+00, -1.77877069e+00,\n",
       "        -2.04958871e-01,  4.10673290e-01],\n",
       "       [-1.51302308e-01,  1.36873937e+00,  1.62149060e+00,\n",
       "        -5.35919592e-02,  1.82351887e+00, -1.05453633e-01,\n",
       "         1.81816769e+00, -7.49832988e-01],\n",
       "       [ 2.57942319e-01,  1.04346108e+00, -4.08389747e-01,\n",
       "        -1.24312818e+00, -1.39292681e+00,  8.81862402e-01,\n",
       "         5.29144466e-01, -7.52927586e-02],\n",
       "       [-1.98665822e+00, -1.46478820e+00,  1.61071825e+00,\n",
       "        -6.21588647e-01, -1.50784506e-02, -5.68684220e-01,\n",
       "        -6.04457676e-01, -1.14103961e+00],\n",
       "       [ 8.65990460e-01, -1.35709465e-01,  1.40745354e+00,\n",
       "        -1.84278643e+00, -8.42118979e-01, -1.41009498e+00,\n",
       "        -8.15353811e-01, -6.22320890e-01],\n",
       "       [-5.15375018e-01, -2.20913827e-01, -4.54488605e-01,\n",
       "        -5.16179740e-01, -8.64074528e-01, -4.75338846e-01,\n",
       "         6.70249939e-01, -1.45046875e-01],\n",
       "       [-1.02861792e-01, -1.08080946e-01, -1.14796329e+00,\n",
       "        -1.53370535e+00, -7.72958770e-02,  1.27695727e+00,\n",
       "        -7.21721470e-01, -5.98548591e-01],\n",
       "       [-2.68938124e-01,  9.48673844e-01, -1.88249126e-01,\n",
       "        -4.97781932e-01,  6.47687376e-01, -7.86569893e-01,\n",
       "        -1.08612478e+00,  1.19662714e+00],\n",
       "       [-1.83944535e+00, -4.81366426e-01, -1.06359231e+00,\n",
       "         1.59405142e-01,  7.17485011e-01, -9.16951120e-01,\n",
       "         8.52449059e-01, -6.03694499e-01],\n",
       "       [ 1.84870422e+00, -7.02171028e-01,  3.55910845e-02,\n",
       "         2.58707643e+00,  2.45054707e-01,  1.21784616e+00,\n",
       "        -3.70915085e-01,  1.30768490e+00],\n",
       "       [ 5.63983977e-01, -8.35949421e-01, -6.24224246e-01,\n",
       "         2.19146848e-01,  4.30234849e-01, -3.98235321e-01,\n",
       "         4.93189126e-01, -1.63378382e+00],\n",
       "       [-2.20310259e+00,  1.92903244e+00, -5.27013659e-01,\n",
       "        -4.58165884e-01, -1.14147019e+00, -4.13281560e-01,\n",
       "         2.27278686e+00,  1.30553454e-01],\n",
       "       [-5.08911729e-01, -7.70294517e-02, -2.13213146e-01,\n",
       "        -8.64303827e-01,  1.80453986e-01,  2.47203484e-01,\n",
       "        -7.88611412e-01,  8.01405013e-01],\n",
       "       [-1.15621471e+00, -2.92472172e+00, -8.48077387e-02,\n",
       "        -8.54629934e-01, -1.18456614e+00, -5.94721317e-01,\n",
       "         6.11579180e-01, -1.20686245e+00],\n",
       "       [-4.26351637e-01,  1.95716262e+00, -1.42283261e+00,\n",
       "         1.58188686e-01, -8.60847652e-01,  1.09739304e+00,\n",
       "         6.10747673e-02, -1.82176769e-01],\n",
       "       [ 7.90793359e-01,  3.69500875e-01,  1.44655541e-01,\n",
       "        -2.61946052e-01, -1.33836889e+00,  7.10051833e-03,\n",
       "        -1.36418009e+00,  6.39087409e-02],\n",
       "       [-9.29149270e-01,  6.82774186e-01,  4.02102441e-01,\n",
       "        -6.58202767e-01, -1.60168099e+00, -1.25261247e-01,\n",
       "        -9.71692502e-01,  9.70285654e-01],\n",
       "       [ 1.96618176e+00,  2.30754778e-01,  6.51004732e-01,\n",
       "        -1.53888512e+00, -3.33807796e-01,  1.90324383e-03,\n",
       "         2.72043794e-01,  8.20351481e-01],\n",
       "       [ 1.34661525e-01,  2.99986312e-03, -4.86987919e-01,\n",
       "        -1.63287592e+00,  7.48022139e-01, -1.41437924e+00,\n",
       "         3.95615190e-01,  2.08341742e+00],\n",
       "       [ 1.13435373e-01,  3.28281671e-01,  3.89902681e-01,\n",
       "         1.72660327e+00,  2.18516064e+00,  2.62446314e-01,\n",
       "         4.08247739e-01,  1.53957462e+00],\n",
       "       [ 1.91212595e-01, -1.18377054e+00,  6.49633110e-01,\n",
       "        -1.59280682e+00,  1.06376553e+00, -1.28861046e+00,\n",
       "         8.18486512e-01,  5.85094452e-01],\n",
       "       [ 9.62569341e-02, -7.04513848e-01,  1.98242471e-01,\n",
       "        -2.45160013e-02, -4.38068360e-01, -9.39599156e-01,\n",
       "         7.29853287e-02,  5.30836880e-01],\n",
       "       [-3.48621398e-01, -9.52451706e-01,  1.20408259e-01,\n",
       "        -5.65828443e-01,  5.19363046e-01, -1.13190567e+00,\n",
       "         2.07676217e-01,  1.22891474e+00],\n",
       "       [ 1.29629803e+00, -6.07084036e-01, -6.10974014e-01,\n",
       "         1.93633246e+00,  1.98603421e-02, -3.47995192e-01,\n",
       "        -3.36992770e-01,  6.89994335e-01],\n",
       "       [-1.71241686e-01, -9.56464410e-01, -3.05982493e-02,\n",
       "         2.11823225e+00,  9.74357128e-01, -2.57203609e-01,\n",
       "        -5.77456415e-01, -2.08020878e+00],\n",
       "       [ 1.42602608e-01, -4.86456871e-01,  6.34421706e-01,\n",
       "        -2.17135620e+00, -7.96250999e-01,  1.14662337e+00,\n",
       "        -1.60723925e-01,  6.62546694e-01],\n",
       "       [ 5.25393076e-02, -4.58627194e-01, -1.91457525e-01,\n",
       "        -5.10675192e-01, -1.02678061e+00,  3.30676526e-01,\n",
       "         1.65156519e+00,  8.96410942e-01],\n",
       "       [-9.21856761e-01, -6.63980424e-01,  2.97063682e-02,\n",
       "         1.24887884e+00, -2.78184235e-01,  7.99012661e-01,\n",
       "        -1.97120714e+00,  4.31550816e-02],\n",
       "       [-7.71859288e-01,  1.74571764e+00,  5.18132150e-01,\n",
       "        -1.99336112e+00, -6.40941501e-01,  4.25120085e-01,\n",
       "        -1.52023327e+00, -1.49747169e+00],\n",
       "       [-1.40922260e+00, -8.83764982e-01,  6.11394405e-01,\n",
       "         1.52023005e+00, -2.08788419e+00, -4.16727334e-01,\n",
       "        -8.26143026e-01,  1.97615325e+00],\n",
       "       [ 3.38877916e-01, -2.61480427e+00,  1.10785747e+00,\n",
       "        -5.21697700e-01,  7.06677437e-01,  2.82571107e-01,\n",
       "        -3.10128659e-01, -1.93970144e-01],\n",
       "       [-1.15833536e-01, -7.35010982e-01, -1.46409619e+00,\n",
       "         2.95942247e-01, -1.64858425e+00, -1.15032303e+00,\n",
       "        -7.41139472e-01, -3.00613433e-01],\n",
       "       [-3.25041175e-01,  6.38336241e-01,  2.05543905e-01,\n",
       "         1.07060611e+00,  1.22522795e+00, -5.81540287e-01,\n",
       "         3.55007797e-01, -9.65720713e-02],\n",
       "       [-1.98866761e+00,  1.29233789e+00,  1.24940932e+00,\n",
       "         1.41517723e+00, -1.03900528e+00, -1.20569710e-02,\n",
       "         1.60214841e-01,  6.85996175e-01],\n",
       "       [-9.08914328e-01, -1.58242479e-01,  3.71773124e-01,\n",
       "         4.40815985e-01,  7.80025125e-01,  1.63346720e+00,\n",
       "         1.83241516e-01, -3.39502096e-02],\n",
       "       [ 3.40998828e-01,  1.14948797e+00,  2.49966964e-01,\n",
       "        -3.98652673e-01, -1.18852234e+00,  9.22351420e-01,\n",
       "        -1.64257979e+00,  2.00997800e-01],\n",
       "       [ 9.13857162e-01,  3.56913179e-01, -2.08627915e+00,\n",
       "         2.23212123e+00,  3.38279635e-01, -1.52337039e+00,\n",
       "         1.10971260e+00,  1.94280767e+00],\n",
       "       [ 7.82093585e-01, -3.96684885e-01, -5.76451346e-02,\n",
       "         1.53663087e+00, -7.92684853e-01, -1.58384636e-01,\n",
       "         2.32754484e-01, -3.07358563e-01],\n",
       "       [-6.97092056e-01, -2.74904668e-01, -1.02201235e+00,\n",
       "        -3.46177928e-02,  3.39788884e-01, -8.17560911e-01,\n",
       "        -1.80575168e+00,  4.50894117e-01],\n",
       "       [-6.69493377e-01,  1.39958668e+00,  2.00003290e+00,\n",
       "         1.53295219e-01, -2.34332204e+00, -5.27160525e-01,\n",
       "         1.82506454e+00,  1.89059067e+00],\n",
       "       [ 6.39826834e-01, -2.03649426e+00, -2.60162324e-01,\n",
       "        -4.38349545e-01, -1.22569658e-01,  1.46398771e+00,\n",
       "        -1.74176216e+00,  2.22182781e-01],\n",
       "       [-2.44094300e+00,  7.21485317e-01,  6.69150114e-01,\n",
       "         8.99584353e-01, -2.50334829e-01, -1.17016447e+00,\n",
       "         9.89824176e-01, -6.38760567e-01],\n",
       "       [ 6.28133535e-01, -6.02816641e-01,  5.86663306e-01,\n",
       "         1.26418322e-02,  1.36342287e+00,  3.22186798e-01,\n",
       "        -2.72061110e-01,  6.39566958e-01],\n",
       "       [ 4.10146445e-01,  1.70333374e+00, -2.11932778e+00,\n",
       "        -7.64443934e-01, -6.18835315e-02,  2.38044333e+00,\n",
       "         6.00131035e-01,  4.58900928e-01],\n",
       "       [ 1.51000261e+00,  1.41797400e+00,  2.57915586e-01,\n",
       "        -6.19758189e-01, -3.25209677e-01,  6.73396364e-02,\n",
       "        -1.00819528e+00,  6.32114351e-01],\n",
       "       [-1.65686607e-01,  2.86553562e-01, -3.29697132e-01,\n",
       "         7.16838062e-01,  9.02030766e-01, -2.37797189e+00,\n",
       "         5.35031796e-01,  1.68749225e+00],\n",
       "       [-6.81727052e-01, -3.81946489e-02, -6.66964173e-01,\n",
       "         4.14838761e-01,  1.81978083e+00,  8.38980496e-01,\n",
       "        -2.00013185e+00, -9.05905738e-02],\n",
       "       [ 2.37177476e-01,  1.12707794e+00,  1.31187439e+00,\n",
       "         2.63228804e-01, -4.15171050e-02,  5.44460535e-01,\n",
       "        -1.15003698e-01, -5.24427950e-01],\n",
       "       [ 1.40554225e+00,  8.92117560e-01, -2.20457941e-01,\n",
       "         4.98367161e-01, -1.36804616e+00, -2.34315488e-02,\n",
       "         7.41881192e-01, -2.06657910e+00],\n",
       "       [ 3.39394987e-01,  2.49242961e-01,  3.70187223e-01,\n",
       "         6.88230544e-02, -4.10494179e-01,  4.53406453e-01,\n",
       "         1.23755172e-01, -1.75891683e-01],\n",
       "       [ 6.86253607e-01, -6.47922158e-01, -6.70542479e-01,\n",
       "        -4.48056728e-01,  1.64594197e+00, -6.20611727e-01,\n",
       "         9.17635739e-01, -1.00953031e+00],\n",
       "       [ 1.37303436e+00,  2.31317496e+00,  3.57605487e-01,\n",
       "         1.37650505e-01,  7.84536898e-02,  3.90391052e-01,\n",
       "        -1.20753027e-01,  2.81250209e-01]], dtype=float32)>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = tf.random.normal([35,8])\n",
    "b = tf.random.normal([35,8])\n",
    "# 拼接方式合并，没有 2 个班级的概念\n",
    "tf.concat([a,b],axis=0) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shapes of all inputs must match: values[0].shape = [35,4] != values[1].shape = [35,8] [Op:Pack] name: stack\n"
     ]
    }
   ],
   "source": [
    "a = tf.random.normal([35,4])\n",
    "b = tf.random.normal([35,8])\n",
    "try:\n",
    "    # 非法堆叠操作，张量 shape 不相同\n",
    "    tf.stack([a,b],axis=-1) \n",
    "except Exception as ex:\n",
    "    print(ex)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([10,35,8])\n",
    "# 等长切割为 10 份\n",
    "result = tf.split(x, num_or_size_splits=10, axis=0)\n",
    "# 返回的列表为 10 个张量的列表\n",
    "len(result) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=101, shape=(1, 35, 8), dtype=float32, numpy=\n",
       "array([[[-0.71061176,  0.79658186,  0.05779533,  0.3065339 ,\n",
       "         -1.5571901 ,  1.304609  ,  1.7410243 , -0.59291756],\n",
       "        [ 0.5173011 ,  1.1431963 ,  0.07744087, -0.98681974,\n",
       "         -1.3003352 , -1.0700133 ,  0.2527959 ,  1.6336491 ],\n",
       "        [ 0.19000381, -0.2586968 , -0.25360337,  0.05912501,\n",
       "          1.7392615 , -0.36911514,  0.37159327,  0.18109626],\n",
       "        [-0.78693324,  0.11115628, -0.681242  ,  1.1092469 ,\n",
       "          1.733427  , -0.06182566,  0.6468332 ,  0.63214767],\n",
       "        [-0.07541103, -0.3712584 ,  0.41619194,  1.4427589 ,\n",
       "         -0.6189989 ,  0.4922443 ,  0.12965348, -0.77344453],\n",
       "        [ 0.2241085 ,  0.8448336 , -0.33020997, -0.10774595,\n",
       "          0.42799875,  0.7393838 , -0.1254559 ,  0.35778087],\n",
       "        [-1.0509243 ,  0.62439466, -1.0573416 , -0.3911914 ,\n",
       "         -0.30571288,  0.13888289, -0.23944423, -1.8241187 ],\n",
       "        [ 0.02203949, -0.44634575,  0.40847892,  0.62689257,\n",
       "         -1.1150584 , -1.1111548 ,  2.2049747 , -1.9063921 ],\n",
       "        [ 0.77603215, -3.2800004 ,  0.40323338, -0.69889534,\n",
       "         -0.23555984, -0.53339   , -0.3525978 ,  0.4634706 ],\n",
       "        [ 0.46262527,  0.50062174,  0.16588376,  1.5253841 ,\n",
       "          0.89234304,  0.31182444,  1.1269023 , -0.36525863],\n",
       "        [ 0.27799776,  2.2662687 , -0.8773654 , -0.74445564,\n",
       "          1.593192  ,  1.5568646 ,  0.12119748, -0.6513433 ],\n",
       "        [-1.3527873 , -1.4336832 ,  2.5429907 , -1.0670041 ,\n",
       "          0.6788935 , -0.48780575,  0.07759992,  0.132675  ],\n",
       "        [-0.32639802,  0.37720546,  0.70722556,  0.9073378 ,\n",
       "          0.7688258 ,  0.14337535, -0.19265552,  0.6312155 ],\n",
       "        [-0.6322152 , -1.9680963 ,  0.59060776,  0.37337074,\n",
       "         -1.7043666 , -1.2659713 , -1.2743154 , -0.8340698 ],\n",
       "        [ 0.80016595, -0.28688484,  0.568332  , -1.0529169 ,\n",
       "         -0.341417  , -0.3168573 ,  0.1074499 ,  0.41972068],\n",
       "        [ 0.09021439,  0.5653322 , -0.5000554 ,  0.63550544,\n",
       "          1.1351559 ,  0.64347804,  1.0503291 ,  0.14615473],\n",
       "        [ 0.51188236, -0.57128495,  0.02226405, -0.7169377 ,\n",
       "          0.5200722 , -0.95388025,  0.32285127, -1.7392943 ],\n",
       "        [ 0.1530862 ,  1.322436  ,  0.09716281, -1.2893842 ,\n",
       "          1.8311967 ,  1.6483352 , -0.49980724,  0.5914221 ],\n",
       "        [-0.92047757, -0.18073614, -0.06641132,  0.40052658,\n",
       "          1.567261  ,  0.11462145,  0.06627472, -1.0888684 ],\n",
       "        [-0.18284437,  1.0606426 , -1.1273583 , -0.49200904,\n",
       "          1.0202112 , -0.24237062,  0.30938244, -0.5790568 ],\n",
       "        [ 1.5342544 ,  0.14185326, -0.686483  ,  1.0632178 ,\n",
       "         -0.99519175,  0.25842136,  2.6094432 , -0.3988035 ],\n",
       "        [ 0.16702555, -0.19791453,  0.7670566 ,  0.14623208,\n",
       "         -0.0949799 , -1.234863  , -0.7089689 ,  0.8387867 ],\n",
       "        [-0.67590266,  0.62212056, -0.31009987, -0.35747546,\n",
       "          0.08568701,  1.4631892 , -2.1137278 , -1.014399  ],\n",
       "        [ 1.3035927 , -0.9702763 , -0.20599583, -1.7916292 ,\n",
       "         -0.15055181,  1.3671793 ,  0.5595976 , -0.60048497],\n",
       "        [ 1.7708993 , -0.93395525, -1.2969754 , -0.08309899,\n",
       "          1.5166746 ,  0.24063435, -0.8748417 , -0.555506  ],\n",
       "        [ 0.43713713, -0.2927852 ,  1.2588434 ,  0.28737718,\n",
       "         -0.69822943,  0.69439626,  0.7939654 ,  0.39649475],\n",
       "        [-0.24091858,  0.48061782,  1.5648688 , -0.5940621 ,\n",
       "         -0.5354128 ,  0.6840849 ,  0.20302162,  0.1707749 ],\n",
       "        [ 1.7407277 , -0.44539604, -0.4863335 , -0.4032506 ,\n",
       "          0.23738529, -3.0731313 , -0.6040938 ,  1.3512337 ],\n",
       "        [ 0.34458634, -1.2283292 ,  0.6625551 ,  1.6914811 ,\n",
       "          2.0174015 ,  1.3731291 ,  1.007383  ,  2.172104  ],\n",
       "        [ 0.7224945 , -1.0224415 ,  0.98200476, -1.4030545 ,\n",
       "          0.10979424, -0.523268  ,  0.75828594, -0.67249453],\n",
       "        [-0.7127803 ,  0.6733936 ,  0.98147047, -0.7093545 ,\n",
       "         -0.36597785,  0.7956089 ,  0.29536414, -2.3027966 ],\n",
       "        [ 2.4132295 ,  0.2963499 , -1.2956184 , -0.65728503,\n",
       "         -1.1463754 , -0.85273486, -1.6355628 , -2.3443143 ],\n",
       "        [-1.3277183 , -1.254617  ,  1.6252519 , -0.16031802,\n",
       "         -0.5228777 , -0.8194295 ,  0.8491565 ,  1.9752792 ],\n",
       "        [ 0.47570568,  1.0767779 , -0.23198208,  3.0018158 ,\n",
       "          2.5480385 ,  0.796928  ,  0.61211276,  0.82460254],\n",
       "        [-1.0086102 ,  0.03647137, -1.6946276 , -0.6010022 ,\n",
       "          1.841955  ,  0.1443826 , -0.31377864,  1.1019641 ]]],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " # 查看第一个班级的成绩册张量\n",
    "result[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([10,35,8])\n",
    "# 自定义长度的切割，切割为 4 份，返回 4 个张量的列表 result\n",
    "result = tf.split(x, num_or_size_splits=[4,2,2,2] ,axis=0)\n",
    "len(result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=119, shape=(4, 35, 8), dtype=float32, numpy=\n",
       "array([[[-0.51582205,  2.0494723 , -0.8840653 , ..., -0.74907345,\n",
       "          1.0238028 ,  0.15296724],\n",
       "        [ 0.85806024, -1.029754  , -1.6307371 , ...,  0.52414346,\n",
       "         -0.26439312, -0.17763866],\n",
       "        [ 0.43767044,  0.64068604,  1.9422854 , ..., -0.7948828 ,\n",
       "         -0.5623937 ,  0.12090406],\n",
       "        ...,\n",
       "        [-1.6878669 ,  2.3720915 ,  0.51692224, ..., -1.7110244 ,\n",
       "          0.83440447,  2.112926  ],\n",
       "        [-1.9381948 , -0.93184924,  0.12526953, ..., -0.6946057 ,\n",
       "         -0.8142133 , -1.2913251 ],\n",
       "        [-0.11407708,  0.9578615 ,  0.30091557, ...,  1.1943645 ,\n",
       "          0.66494894, -1.1483077 ]],\n",
       "\n",
       "       [[ 1.8704697 , -1.5103718 , -1.0324745 , ...,  1.6088476 ,\n",
       "         -1.0951946 ,  0.6290548 ],\n",
       "        [ 0.60626346,  2.3051264 , -1.1403931 , ...,  0.8318533 ,\n",
       "         -0.3481026 ,  1.0625865 ],\n",
       "        [ 0.9622153 ,  0.40345863, -0.96485895, ..., -1.4986656 ,\n",
       "         -0.4640006 , -1.4966893 ],\n",
       "        ...,\n",
       "        [-0.88371533, -1.1181141 ,  1.0532811 , ...,  0.6672531 ,\n",
       "          0.11610186,  1.1023173 ],\n",
       "        [ 0.6075228 ,  0.00954892,  1.2495347 , ..., -0.21136628,\n",
       "          0.31317064,  0.45377278],\n",
       "        [-0.4853026 ,  2.0459473 , -1.0589452 , ..., -0.26927903,\n",
       "          2.1701097 ,  0.48740846]],\n",
       "\n",
       "       [[ 1.2595849 ,  1.3897253 , -0.47399542, ...,  0.7532533 ,\n",
       "         -0.375362  , -0.06165764],\n",
       "        [ 1.1523768 , -1.4890147 ,  2.2191975 , ..., -1.1682351 ,\n",
       "         -0.11091958,  1.2290714 ],\n",
       "        [-1.5201288 , -0.36954606,  1.0183944 , ...,  0.354768  ,\n",
       "          0.06799102, -0.07157459],\n",
       "        ...,\n",
       "        [ 0.90034324, -0.5879763 ,  0.27278608, ...,  0.8025601 ,\n",
       "          1.2068334 ,  0.8569422 ],\n",
       "        [ 0.18433921,  0.09464485,  0.4665127 , ...,  1.6514025 ,\n",
       "          2.00069   ,  0.41472033],\n",
       "        [-0.7771079 , -0.3211996 , -0.46081668, ..., -0.3869544 ,\n",
       "          2.2333791 ,  0.73890543]],\n",
       "\n",
       "       [[-0.93043137, -0.9581592 , -0.6699845 , ..., -0.12634745,\n",
       "         -1.1547039 ,  0.35630834],\n",
       "        [-1.2951217 , -0.9285052 ,  0.8790629 , ...,  0.38250917,\n",
       "          0.33300754,  0.1233834 ],\n",
       "        [-0.13633037,  1.1285207 ,  1.1615869 , ..., -0.49547514,\n",
       "         -0.90746194,  0.5669563 ],\n",
       "        ...,\n",
       "        [ 1.285093  , -0.7453308 ,  1.1137154 , ..., -1.0061793 ,\n",
       "         -0.9578069 ,  0.9867779 ],\n",
       "        [-0.42984924,  0.76459616,  1.18757   , ..., -1.4193722 ,\n",
       "          0.57648283,  0.82542366],\n",
       "        [-0.13458395, -0.6906355 , -0.4914529 , ...,  1.5463033 ,\n",
       "          1.3516121 ,  0.37078688]]], dtype=float32)>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([10,35,8])\n",
    "# Unstack 为长度为 1 的张量\n",
    "result = tf.unstack(x,axis=0) \n",
    "# 返回 10 个张量的列表\n",
    "len(result) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看切割后的张量的形状："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=129, shape=(35, 8), dtype=float32, numpy=\n",
       "array([[ 1.20321870e-01,  9.96825755e-01, -5.38338244e-01,\n",
       "        -3.08420420e-01,  1.98823714e+00,  1.90593636e+00,\n",
       "        -5.42092383e-01,  7.50393793e-02],\n",
       "       [-6.24389708e-01,  4.54716206e-01,  5.13056219e-01,\n",
       "         1.98021084e-01, -1.46376622e+00,  7.09650695e-01,\n",
       "         3.63261998e-01, -3.06045830e-01],\n",
       "       [ 1.95489854e-01,  1.57836270e+00, -1.10582625e-02,\n",
       "         1.34190631e+00, -1.14899099e+00, -1.38217914e+00,\n",
       "        -6.01495802e-01, -6.82765782e-01],\n",
       "       [ 5.55417895e-01,  4.23767567e-01, -1.00912786e+00,\n",
       "        -5.60995221e-01, -3.41505140e-01, -2.84672678e-01,\n",
       "         1.37264714e-01, -2.66437387e+00],\n",
       "       [ 1.14534807e+00, -1.45803452e+00,  1.31021726e+00,\n",
       "         5.29078841e-01, -3.29371810e-01,  2.08497167e+00,\n",
       "         1.03301001e+00,  2.60946423e-01],\n",
       "       [ 3.72674853e-01,  1.39539468e+00, -6.51956201e-01,\n",
       "        -4.81216274e-02,  5.04172623e-01,  1.04484308e+00,\n",
       "         6.81853712e-01,  5.09332895e-01],\n",
       "       [ 3.35866421e-01,  2.86486804e-01, -4.54525575e-02,\n",
       "         2.54970372e-01, -1.63571149e-01, -1.06310107e-01,\n",
       "        -3.16950709e-01, -7.34865189e-01],\n",
       "       [-1.00503206e+00, -9.46393788e-01, -7.17773139e-01,\n",
       "        -1.43500686e-01, -1.06420827e+00, -5.88725328e-01,\n",
       "         4.66864318e-01, -4.88754183e-01],\n",
       "       [-8.78106475e-01, -1.09153068e+00,  1.23758459e+00,\n",
       "        -8.06981385e-01,  2.14999366e+00,  7.40325391e-01,\n",
       "         1.62196681e-01, -5.25807023e-01],\n",
       "       [-1.51791716e+00, -2.77116060e+00, -4.72224951e-01,\n",
       "        -1.01298916e+00,  1.48381484e+00, -1.42935419e+00,\n",
       "         1.35212922e+00,  4.01609927e-01],\n",
       "       [-1.00891195e-01, -9.29735005e-01,  1.96326125e+00,\n",
       "         3.61650735e-01, -1.53310144e+00, -9.52300549e-01,\n",
       "         1.87518787e+00, -6.74426317e-01],\n",
       "       [ 5.91801405e-01, -6.41624153e-01, -2.35823560e+00,\n",
       "         4.35643643e-01, -4.17717457e-01, -1.25976193e+00,\n",
       "         7.92934299e-02, -4.61463705e-02],\n",
       "       [-1.43321395e+00,  1.20832539e+00, -5.75330198e-01,\n",
       "         3.83494139e-01,  2.07591081e+00, -7.38219202e-01,\n",
       "         1.34788871e+00,  1.01503527e+00],\n",
       "       [-3.61495852e-01, -4.81832653e-01, -8.63673985e-01,\n",
       "         2.13575315e+00,  5.22628725e-01, -2.77783036e-01,\n",
       "        -1.28299701e+00, -1.20839491e-01],\n",
       "       [ 1.65447974e+00,  2.17120856e-01, -1.67827213e+00,\n",
       "         8.16446990e-02, -1.13258493e+00,  6.14580631e-01,\n",
       "        -2.00070783e-01,  1.07854486e-01],\n",
       "       [ 9.62518435e-03, -2.61407161e+00, -4.09751058e-01,\n",
       "         3.99478495e-01,  1.27383518e+00, -2.63312280e-01,\n",
       "         2.30050516e+00,  1.34989893e+00],\n",
       "       [-1.18594873e+00,  2.50040144e-01, -1.93262815e+00,\n",
       "        -3.32279265e-01, -5.08270025e-01, -1.12072325e+00,\n",
       "        -1.13284516e+00,  5.82139790e-01],\n",
       "       [ 5.41321039e-01, -2.05040395e-01,  5.03463864e-01,\n",
       "         6.72214985e-01, -1.38279470e-02,  1.87153685e+00,\n",
       "         1.94124556e+00, -1.41774631e+00],\n",
       "       [-6.26836777e-01, -1.53580397e-01,  2.19783330e+00,\n",
       "        -3.84465933e-01,  2.79335827e-02, -9.63196158e-01,\n",
       "        -1.56771988e-02,  9.52575058e-02],\n",
       "       [-1.31375849e-01, -2.26662219e-01,  4.97258484e-01,\n",
       "        -2.35816389e-01,  3.96115333e-01, -7.31087685e-01,\n",
       "        -1.86595157e-01,  7.52710760e-01],\n",
       "       [-1.01406768e-01, -1.68198657e+00, -5.58387876e-01,\n",
       "        -1.22035754e+00,  5.02746403e-01,  6.42437279e-01,\n",
       "         2.80328131e+00, -6.28265083e-01],\n",
       "       [ 9.67953913e-03, -6.11861229e-01,  9.31083739e-01,\n",
       "        -7.62841344e-01,  3.18123490e-01, -6.53019622e-02,\n",
       "         1.45796764e+00, -8.77237797e-01],\n",
       "       [ 1.86336279e+00,  7.63331354e-01,  1.44183859e-01,\n",
       "        -2.26343423e-01,  1.09803772e+00, -1.38256156e+00,\n",
       "         8.74101758e-01, -8.18138659e-01],\n",
       "       [-9.45135474e-01, -2.24515605e+00,  1.29242659e+00,\n",
       "         2.49869275e+00, -5.72067089e-02, -2.80341673e+00,\n",
       "         5.91590166e-01, -3.08831096e-01],\n",
       "       [-4.61941093e-01,  2.97482759e-02,  5.44428170e-01,\n",
       "         4.57032710e-01, -1.46069741e+00, -7.86898553e-01,\n",
       "        -2.63708234e+00,  4.95954216e-01],\n",
       "       [-1.13539708e+00, -2.97037095e-01, -3.08543086e+00,\n",
       "        -1.99490100e-01,  1.60004929e-01,  1.18499291e+00,\n",
       "         7.52633452e-01,  7.83466876e-01],\n",
       "       [ 1.99165821e-01,  1.20582008e+00, -1.70519888e+00,\n",
       "        -1.20774627e-01, -1.90525070e-01,  4.59330618e-01,\n",
       "         7.88504243e-01, -8.72490644e-01],\n",
       "       [ 6.10936403e-01, -2.82047510e-01, -7.22079754e-01,\n",
       "         1.35602963e+00, -3.57067376e-01, -1.10140872e+00,\n",
       "         1.21260822e+00, -2.40782633e-01],\n",
       "       [-1.67102087e+00,  5.88035882e-01, -1.00370884e+00,\n",
       "         1.39932072e+00, -1.26573205e+00,  4.09316570e-01,\n",
       "         2.06728950e-01,  9.20631588e-01],\n",
       "       [-4.22560364e-01, -7.81091034e-01,  8.30993131e-02,\n",
       "        -1.00847208e+00,  6.76259637e-01,  1.14883634e-03,\n",
       "        -8.63731980e-01, -1.51110291e+00],\n",
       "       [ 1.98953903e+00, -1.21636808e+00, -1.01795010e-01,\n",
       "         1.18380678e+00,  1.25010359e+00, -1.36490047e+00,\n",
       "         1.81876957e-01,  1.19893980e+00],\n",
       "       [-6.37528226e-02, -5.36322713e-01,  3.64189804e-01,\n",
       "         1.85877979e+00,  4.79324371e-01, -3.11528295e-01,\n",
       "         1.09049320e+00,  6.44986868e-01],\n",
       "       [-5.08090742e-02,  1.50629342e+00,  1.00594926e+00,\n",
       "         1.55281401e+00, -1.74704003e+00, -4.36868429e-01,\n",
       "         4.61309552e-01, -5.46173930e-01],\n",
       "       [-2.41323948e+00,  9.01596248e-01,  9.09911811e-01,\n",
       "         9.56870556e-01,  4.47095931e-01,  1.23860574e+00,\n",
       "        -6.81649923e-01, -6.53436899e-01],\n",
       "       [-5.14853418e-01, -6.07765138e-01, -2.74722219e-01,\n",
       "        -3.95078748e-01,  1.66904902e+00,  3.47327292e-01,\n",
       "         1.12883322e-01, -1.83392107e+00]], dtype=float32)>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 第一个班级\n",
    "result[0] "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据统计\n",
    "### 向量范数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=145, shape=(), dtype=float32, numpy=4.0>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.ones([2,2])\n",
    "# 计算 L1 范数\n",
    "tf.norm(x,ord=1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=150, shape=(), dtype=float32, numpy=2.0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算 L2 范数\n",
    "tf.norm(x,ord=2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=154, shape=(), dtype=float32, numpy=1.0>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 计算∞范数\n",
    "tf.norm(x,ord=np.inf) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最值、均值、和"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=162, shape=(4,), dtype=float32, numpy=array([1.051403 , 1.3850142, 1.135632 , 1.9523605], dtype=float32)>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模型生成概率\n",
    "x = tf.random.normal([4,10])\n",
    "# 统计概率维度上的最大值\n",
    "tf.reduce_max(x,axis=1) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "返回长度为 4 的向量，分别代表了每个样本的最大概率值。 同样求出每个样本概率的最小值，实现如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=164, shape=(4,), dtype=float32, numpy=array([-0.39419806, -1.737878  , -0.4118258 , -1.5625464 ], dtype=float32)>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计概率维度上的最小值\n",
    "tf.reduce_min(x,axis=1) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "求出每个样本的概率的均值，实现如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=166, shape=(4,), dtype=float32, numpy=array([ 0.243161  , -0.12091659,  0.11944889, -0.02008009], dtype=float32)>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 统计概率维度上的均值\n",
    "tf.reduce_mean(x,axis=1) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当不指定 axis 参数时， tf.reduce_*函数会求解出全局元素的最大、最小、 均值、和等数据，例如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(<tf.Tensor: id=174, shape=(), dtype=float32, numpy=1.6513593>,\n",
       " <tf.Tensor: id=176, shape=(), dtype=float32, numpy=-1.9508023>,\n",
       " <tf.Tensor: id=178, shape=(), dtype=float32, numpy=0.05119744>)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([4,10])\n",
    "# 统计全局的最大、最小、均值、和，返回的张量均为标量\n",
    "tf.reduce_max(x),tf.reduce_min(x),tf.reduce_mean(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在求解误差函数时，通过 TensorFlow 的 MSE 误差函数可以求得每个样本的误差，需要计算样本的平均误差，此时可以通过 tf.reduce_mean 在样本数维度上计算均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=194, shape=(), dtype=float32, numpy=1.051903>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模拟网络预测输出\n",
    "out = tf.random.normal([4,10]) \n",
    "# 模拟真实标签\n",
    "y = tf.constant([1,2,2,0]) \n",
    "# one-hot 编码\n",
    "y = tf.one_hot(y,depth=10) \n",
    "# 计算每个样本的误差\n",
    "loss = keras.losses.mse(y,out)\n",
    "# 平均误差，在样本数维度上取均值\n",
    "loss = tf.reduce_mean(loss) \n",
    "loss # 误差标量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=202, shape=(4,), dtype=float32, numpy=array([-1.8025079,  5.792209 ,  0.9623766, -9.07829  ], dtype=float32)>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out = tf.random.normal([4,10])\n",
    "# 求最后一个维度的和\n",
    "tf.reduce_sum(out,axis=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑 10 分类问题，我们得到神经网络的输出张量 out， shape 为[2,10]， 代表了 2 个样本属于 10 个类别的概率， 由于元素的位置索引代表了当前样本属于此类别的概率，预测时往往会选择概率值最大的元素所在的索引号作为样本类别的预测值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=209, shape=(2, 10), dtype=float32, numpy=\n",
       "array([[0.2822498 , 0.00368797, 0.20614296, 0.06334717, 0.11588178,\n",
       "        0.05546281, 0.03070444, 0.01920971, 0.15640783, 0.06690557],\n",
       "       [0.0742564 , 0.13357079, 0.07443476, 0.5149969 , 0.05243919,\n",
       "        0.05450327, 0.0355561 , 0.01370301, 0.02166766, 0.02487192]],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out = tf.random.normal([2,10])\n",
    "# 通过 softmax 函数转换为概率值\n",
    "out = tf.nn.softmax(out, axis=1) \n",
    "out"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过 tf.argmax(x, axis)和 tf.argmin(x, axis)可以求解在 axis 轴上， x 的最大值、 最小值所在的索引号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=211, shape=(2,), dtype=int64, numpy=array([0, 3], dtype=int64)>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred = tf.argmax(out, axis=1) # 选取概率最大的位置\n",
    "pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 张量比较"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑 100 个样本的预测结果，通过 tf.argmax 获取预测类别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=220, shape=(100,), dtype=int64, numpy=\n",
       "array([0, 2, 3, 7, 1, 1, 4, 9, 7, 3, 4, 2, 1, 4, 7, 5, 0, 6, 3, 6, 0, 1,\n",
       "       1, 8, 5, 0, 3, 8, 6, 2, 7, 0, 4, 9, 6, 9, 5, 4, 9, 1, 8, 6, 8, 4,\n",
       "       3, 4, 8, 1, 8, 7, 3, 6, 7, 4, 2, 6, 4, 8, 4, 1, 9, 1, 6, 8, 4, 8,\n",
       "       9, 4, 4, 4, 3, 5, 1, 9, 2, 4, 0, 9, 1, 2, 0, 9, 0, 1, 7, 8, 6, 4,\n",
       "       8, 7, 9, 4, 2, 9, 2, 8, 8, 6, 1, 6], dtype=int64)>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out = tf.random.normal([100,10])\n",
    "out = tf.nn.softmax(out, axis=1) # 输出转换为概率\n",
    "pred = tf.argmax(out, axis=1) # 计算预测值\n",
    "pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=224, shape=(100,), dtype=int64, numpy=\n",
       "array([4, 9, 1, 4, 2, 0, 3, 7, 4, 4, 5, 0, 4, 2, 8, 7, 8, 0, 3, 6, 3, 3,\n",
       "       5, 8, 9, 7, 7, 4, 8, 0, 4, 4, 3, 2, 8, 4, 8, 7, 1, 9, 0, 6, 9, 6,\n",
       "       6, 1, 0, 0, 5, 5, 2, 1, 4, 2, 7, 5, 7, 1, 2, 3, 7, 5, 2, 1, 6, 4,\n",
       "       3, 2, 4, 5, 9, 6, 7, 7, 2, 5, 5, 5, 0, 9, 9, 8, 1, 6, 9, 8, 5, 3,\n",
       "       1, 3, 7, 6, 8, 5, 1, 7, 8, 4, 0, 1], dtype=int64)>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模拟生成真实标签\n",
    "y = tf.random.uniform([100],dtype=tf.int64,maxval=10)\n",
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过 tf.equal(a, b)(或 tf.math.equal(a,b)，两者等价)函数可以比较这 2 个张量是否相等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=225, shape=(100,), dtype=bool, numpy=\n",
       "array([False, False, False, False, False, False, False, False, False,\n",
       "       False, False, False, False, False, False, False, False, False,\n",
       "        True,  True, False, False, False,  True, False, False, False,\n",
       "       False, False, False, False, False, False, False, False, False,\n",
       "       False, False, False, False, False,  True, False, False, False,\n",
       "       False, False, False, False, False, False, False, False, False,\n",
       "       False, False, False, False, False, False, False, False, False,\n",
       "       False, False, False, False, False,  True, False, False, False,\n",
       "       False, False,  True, False, False, False, False, False, False,\n",
       "       False, False, False, False,  True, False, False, False, False,\n",
       "       False, False, False, False, False, False,  True, False, False,\n",
       "       False])>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 预测值与真实值比较，返回布尔类型的张量\n",
    "out = tf.equal(pred,y) \n",
    "out"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "out = tf.cast(out, dtype=tf.float32) # 布尔型转 int 型\n",
    "correct = tf.reduce_sum(out) # 统计 True 的个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=228, shape=(), dtype=float32, numpy=8.0>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out = tf.cast(out, dtype=tf.float32) # 布尔型转 int 型\n",
    "correct = tf.reduce_sum(out) # 统计 True 的个数\n",
    "correct"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 填充与复制\n",
    "### 填充"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=232, shape=(6,), dtype=int32, numpy=array([7, 8, 1, 6, 0, 0])>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = tf.constant([1,2,3,4,5,6]) # 第一个句子\n",
    "b = tf.constant([7,8,1,6]) # 第二个句子\n",
    "b = tf.pad(b, [[0,2]]) # 句子末尾填充 2 个 0\n",
    "b # 填充后的结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=233, shape=(2, 6), dtype=int32, numpy=\n",
       "array([[1, 2, 3, 4, 5, 6],\n",
       "       [7, 8, 1, 6, 0, 0]])>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 堆叠合并，创建句子数维度\n",
    "tf.stack([a,b],axis=0) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以 IMDB 数据集的加载为例，我们来演示如何将不等长的句子变换为等长结构"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(25000, 80) (25000, 80)\n"
     ]
    }
   ],
   "source": [
    "# 设定词汇量大小\n",
    "total_words = 10000 \n",
    "# 最大句子长度\n",
    "max_review_len = 80\n",
    "# 词向量长度\n",
    "embedding_len = 100 \n",
    "# 加载 IMDB 数据集\n",
    "(x_train, y_train), (x_test, y_test) = keras.datasets.imdb.load_data(num_words=total_words)\n",
    "# 将句子填充或截断到相同长度，设置为末尾填充和末尾截断方式\n",
    "x_train = keras.preprocessing.sequence.pad_sequences(x_train, maxlen=max_review_len,truncating='post',padding='post')\n",
    "x_test = keras.preprocessing.sequence.pad_sequences(x_test, maxlen=max_review_len,truncating='post',padding='post')\n",
    "# 打印等长的句子张量形状\n",
    "print(x_train.shape, x_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=241, shape=(4, 32, 32, 1), dtype=float32, numpy=\n",
       "array([[[[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.8799022 ],\n",
       "         ...,\n",
       "         [-0.47110438],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [-2.3459978 ],\n",
       "         ...,\n",
       "         [-0.07753616],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]]],\n",
       "\n",
       "\n",
       "       [[[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [-1.0867372 ],\n",
       "         ...,\n",
       "         [ 2.4075184 ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [-0.02435581],\n",
       "         ...,\n",
       "         [-0.14829   ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]]],\n",
       "\n",
       "\n",
       "       [[[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 2.2738972 ],\n",
       "         ...,\n",
       "         [ 0.22569631],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 1.3862711 ],\n",
       "         ...,\n",
       "         [ 1.5250754 ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]]],\n",
       "\n",
       "\n",
       "       [[[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [-1.0938241 ],\n",
       "         ...,\n",
       "         [-1.189399  ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [-0.1578476 ],\n",
       "         ...,\n",
       "         [ 0.89655155],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]],\n",
       "\n",
       "        [[ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         ...,\n",
       "         [ 0.        ],\n",
       "         [ 0.        ],\n",
       "         [ 0.        ]]]], dtype=float32)>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([4,28,28,1])\n",
    "# 图片上下、左右各填充 2 个单元\n",
    "tf.pad(x,[[0,0],[2,2],[2,2],[0,0]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 复制"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=249, shape=(8, 96, 96, 3), dtype=float32, numpy=\n",
       "array([[[[-1.17013581e-01, -8.54849160e-01, -4.47317600e-01],\n",
       "         [ 5.97957611e-01, -1.33580005e+00,  1.40980944e-01],\n",
       "         [ 4.42491591e-01, -1.03191543e+00, -8.65772188e-01],\n",
       "         ...,\n",
       "         [ 7.67181396e-01,  1.19259119e+00,  7.04253078e-01],\n",
       "         [-1.86291099e+00,  1.97195426e-01,  1.08628142e+00],\n",
       "         [-1.38816381e+00,  1.21676123e+00,  2.46099800e-01]],\n",
       "\n",
       "        [[-6.20169044e-01,  1.24710679e+00, -9.12470758e-01],\n",
       "         [ 1.07202268e+00, -2.58650327e+00,  1.56918788e+00],\n",
       "         [-8.56183469e-01,  5.62816918e-01,  8.66802573e-01],\n",
       "         ...,\n",
       "         [-1.63892710e+00, -2.02370614e-01, -4.45714533e-01],\n",
       "         [ 1.08753645e+00,  2.96987630e-02,  4.39010620e-01],\n",
       "         [ 1.62044942e+00, -1.34623766e+00,  1.82857215e-01]],\n",
       "\n",
       "        [[ 1.15114041e-01, -1.82197881e+00, -2.88621373e-02],\n",
       "         [ 5.85185409e-01,  1.10225296e+00, -5.72004855e-01],\n",
       "         [ 3.43006849e-01, -6.31329775e-01,  9.22332704e-01],\n",
       "         ...,\n",
       "         [ 2.93513149e-01,  9.68566835e-02,  4.64184165e-01],\n",
       "         [-1.18748987e+00,  9.40445662e-01,  1.07140802e-02],\n",
       "         [ 1.55444658e+00, -3.01232159e-01, -8.67911428e-02]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 4.32143100e-02,  4.60330062e-02, -7.45293021e-01],\n",
       "         [ 2.02482772e+00,  9.19441700e-01,  1.74963450e+00],\n",
       "         [-1.06274581e+00, -6.42722428e-01,  2.51643848e+00],\n",
       "         ...,\n",
       "         [-1.56291711e+00, -9.33500051e-01,  6.69843495e-01],\n",
       "         [ 1.19239792e-01, -1.26503778e+00, -6.14883542e-01],\n",
       "         [ 1.77261502e-01, -3.94245982e-01, -2.07764953e-01]],\n",
       "\n",
       "        [[-9.99094069e-01,  8.52492929e-01,  3.78665626e-01],\n",
       "         [ 8.96065056e-01,  1.24357820e+00,  1.53224277e+00],\n",
       "         [ 1.22496819e+00,  4.58534807e-01,  6.02415740e-01],\n",
       "         ...,\n",
       "         [-1.43164790e+00,  1.08343732e+00,  2.03078318e+00],\n",
       "         [ 1.31845045e+00, -9.80849922e-01, -2.28341624e-01],\n",
       "         [-6.62081122e-01,  8.82218312e-03, -2.99778372e-01]],\n",
       "\n",
       "        [[-2.97914762e-02,  1.69999671e+00, -1.27378976e+00],\n",
       "         [-2.20461667e-01, -8.39532375e-01,  1.04507230e-01],\n",
       "         [ 1.24179459e+00,  7.38589942e-01, -1.47252870e+00],\n",
       "         ...,\n",
       "         [-1.15737665e+00, -3.51810127e-01,  1.79742798e-01],\n",
       "         [-4.17976260e-01, -2.29473144e-01,  7.10218787e-01],\n",
       "         [ 2.64118030e-03, -8.21975112e-01,  1.13495469e-01]]],\n",
       "\n",
       "\n",
       "       [[[-1.45702422e+00,  7.43243873e-01,  3.98864895e-01],\n",
       "         [ 3.80441278e-01, -3.60891491e-01, -4.78738904e-01],\n",
       "         [-9.23580602e-02,  2.20746255e+00, -6.15553379e-01],\n",
       "         ...,\n",
       "         [-1.55242443e+00, -9.19241667e-01, -3.02556634e-01],\n",
       "         [-9.49915409e-01,  1.20624840e+00,  1.48399547e-01],\n",
       "         [ 1.24513066e+00,  4.24635224e-02,  2.21942425e-01]],\n",
       "\n",
       "        [[-1.86504829e+00, -1.04460633e+00,  6.49136305e-01],\n",
       "         [-1.18314719e+00,  4.38669056e-01,  9.06445444e-01],\n",
       "         [ 2.22163379e-01,  1.91850809e-03, -2.38834456e-01],\n",
       "         ...,\n",
       "         [ 3.45192403e-01,  1.85199058e+00, -1.11558926e+00],\n",
       "         [-5.44553459e-01, -3.98860462e-02, -2.97898203e-01],\n",
       "         [-7.18033373e-01, -5.62032700e-01,  3.14204884e-03]],\n",
       "\n",
       "        [[-7.58221745e-01,  9.35516059e-01, -1.14445543e+00],\n",
       "         [-7.19129086e-01,  2.19456816e+00,  1.89709055e+00],\n",
       "         [ 1.33132350e+00, -5.72015524e-01,  1.19792044e+00],\n",
       "         ...,\n",
       "         [ 2.74416876e+00,  1.18794255e-01,  4.94464189e-01],\n",
       "         [ 2.89854670e+00,  8.08174074e-01, -1.81825101e-01],\n",
       "         [ 1.10058677e+00, -1.95355788e-01,  3.41393128e-02]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 7.24445045e-01,  8.16997170e-01, -4.16591465e-01],\n",
       "         [-7.13465452e-01,  5.83592474e-01,  5.25312364e-01],\n",
       "         [ 2.57630169e-01,  1.22399259e+00, -3.54739159e-01],\n",
       "         ...,\n",
       "         [-1.65710486e-02, -1.45791435e+00,  1.59775484e+00],\n",
       "         [-1.07961643e+00,  1.33069444e+00,  1.29983932e-01],\n",
       "         [-1.05416715e+00, -3.39990705e-01, -9.90674913e-01]],\n",
       "\n",
       "        [[ 9.56161022e-01,  1.62170720e+00, -1.19630969e+00],\n",
       "         [ 1.76299214e-01,  3.51115316e-01,  5.41068256e-01],\n",
       "         [ 4.89939451e-01, -2.20488739e+00, -1.05383122e+00],\n",
       "         ...,\n",
       "         [ 1.71932173e+00,  7.59614706e-01, -1.24161983e+00],\n",
       "         [-1.09051339e-01,  1.26480854e+00, -1.06042051e+00],\n",
       "         [-1.83947787e-01, -7.38581002e-01,  2.22325295e-01]],\n",
       "\n",
       "        [[-6.05599940e-01,  1.34881210e+00, -1.30150545e+00],\n",
       "         [ 1.45950127e+00, -2.11359337e-02,  1.72647083e+00],\n",
       "         [-9.93281364e-01,  1.18163511e-01,  6.76577210e-01],\n",
       "         ...,\n",
       "         [-1.57572120e-01,  6.42813385e-01, -1.70966280e+00],\n",
       "         [-1.55432451e+00,  1.10912228e+00,  1.65817022e+00],\n",
       "         [-1.01787806e+00, -9.84751463e-01,  9.64325130e-01]]],\n",
       "\n",
       "\n",
       "       [[[ 9.87086236e-01,  1.01660597e+00,  3.89129341e-01],\n",
       "         [-7.05140755e-02, -4.75890994e-01, -9.96782482e-01],\n",
       "         [-8.08748245e-01,  6.33708119e-01,  1.56911850e+00],\n",
       "         ...,\n",
       "         [-1.21546447e-01,  7.75518060e-01, -3.49573717e-02],\n",
       "         [-1.14731419e+00, -1.66930735e+00,  3.33495587e-01],\n",
       "         [-1.50938332e+00,  1.78505075e+00, -2.00186506e-01]],\n",
       "\n",
       "        [[-1.35176325e+00,  2.89415598e-01, -5.79778731e-01],\n",
       "         [ 5.35497665e-02, -8.56130719e-01,  2.71611238e+00],\n",
       "         [-1.54915705e-01,  3.96167517e-01, -1.31910965e-01],\n",
       "         ...,\n",
       "         [ 9.97630298e-01,  5.78460656e-02,  5.37439823e-01],\n",
       "         [ 1.61765110e+00, -5.21016598e-01, -9.98811603e-01],\n",
       "         [-2.03494596e+00,  2.47299343e-01, -5.27995825e-01]],\n",
       "\n",
       "        [[-2.63168168e+00,  3.77595425e-01,  6.96157515e-01],\n",
       "         [ 1.00485575e+00, -3.08982313e-01,  1.58882320e-01],\n",
       "         [-4.17036414e-01,  1.48479295e+00, -1.40121296e-01],\n",
       "         ...,\n",
       "         [ 8.28627288e-01,  9.65121984e-01, -2.15421960e-01],\n",
       "         [-1.41135138e-02, -8.15516114e-01,  5.04193485e-01],\n",
       "         [ 3.85768652e-01,  1.18360031e+00,  1.41617203e+00]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 9.30071592e-01,  6.65128350e-01,  7.65804872e-02],\n",
       "         [ 5.35867549e-02,  7.64763117e-01,  4.39680934e-01],\n",
       "         [-1.08909500e+00, -4.69493806e-01,  8.03562880e-01],\n",
       "         ...,\n",
       "         [-8.83802593e-01,  3.44968706e-01, -3.07317424e+00],\n",
       "         [-1.35149896e+00,  2.52304971e-01, -2.02670407e+00],\n",
       "         [-1.07736266e+00, -3.85990500e-01, -5.73178709e-01]],\n",
       "\n",
       "        [[ 2.27867508e+00, -1.00258768e+00, -3.55752051e-01],\n",
       "         [ 2.57526159e-01, -1.00412428e+00, -7.40321040e-01],\n",
       "         [ 5.13390005e-02, -1.02857006e+00,  6.62097871e-01],\n",
       "         ...,\n",
       "         [-3.03976446e-01,  5.00331938e-01,  4.14989255e-02],\n",
       "         [-6.30916595e-01,  5.44023693e-01, -3.05766612e-01],\n",
       "         [-6.55456185e-01, -8.92117321e-01, -1.82686269e-01]],\n",
       "\n",
       "        [[ 3.04129094e-01, -7.60973394e-01, -3.79676312e-01],\n",
       "         [ 8.84778500e-01,  1.93629038e+00,  3.04103523e-01],\n",
       "         [-8.07544708e-01,  1.26806235e+00,  4.98001039e-01],\n",
       "         ...,\n",
       "         [ 1.44141662e+00, -9.05145228e-01, -1.09822229e-01],\n",
       "         [-1.07442355e+00, -1.73371851e-01, -2.59353638e-01],\n",
       "         [ 8.74610305e-01,  1.10197890e+00,  6.40892923e-01]]],\n",
       "\n",
       "\n",
       "       ...,\n",
       "\n",
       "\n",
       "       [[[-1.45702422e+00,  7.43243873e-01,  3.98864895e-01],\n",
       "         [ 3.80441278e-01, -3.60891491e-01, -4.78738904e-01],\n",
       "         [-9.23580602e-02,  2.20746255e+00, -6.15553379e-01],\n",
       "         ...,\n",
       "         [-1.55242443e+00, -9.19241667e-01, -3.02556634e-01],\n",
       "         [-9.49915409e-01,  1.20624840e+00,  1.48399547e-01],\n",
       "         [ 1.24513066e+00,  4.24635224e-02,  2.21942425e-01]],\n",
       "\n",
       "        [[-1.86504829e+00, -1.04460633e+00,  6.49136305e-01],\n",
       "         [-1.18314719e+00,  4.38669056e-01,  9.06445444e-01],\n",
       "         [ 2.22163379e-01,  1.91850809e-03, -2.38834456e-01],\n",
       "         ...,\n",
       "         [ 3.45192403e-01,  1.85199058e+00, -1.11558926e+00],\n",
       "         [-5.44553459e-01, -3.98860462e-02, -2.97898203e-01],\n",
       "         [-7.18033373e-01, -5.62032700e-01,  3.14204884e-03]],\n",
       "\n",
       "        [[-7.58221745e-01,  9.35516059e-01, -1.14445543e+00],\n",
       "         [-7.19129086e-01,  2.19456816e+00,  1.89709055e+00],\n",
       "         [ 1.33132350e+00, -5.72015524e-01,  1.19792044e+00],\n",
       "         ...,\n",
       "         [ 2.74416876e+00,  1.18794255e-01,  4.94464189e-01],\n",
       "         [ 2.89854670e+00,  8.08174074e-01, -1.81825101e-01],\n",
       "         [ 1.10058677e+00, -1.95355788e-01,  3.41393128e-02]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 7.24445045e-01,  8.16997170e-01, -4.16591465e-01],\n",
       "         [-7.13465452e-01,  5.83592474e-01,  5.25312364e-01],\n",
       "         [ 2.57630169e-01,  1.22399259e+00, -3.54739159e-01],\n",
       "         ...,\n",
       "         [-1.65710486e-02, -1.45791435e+00,  1.59775484e+00],\n",
       "         [-1.07961643e+00,  1.33069444e+00,  1.29983932e-01],\n",
       "         [-1.05416715e+00, -3.39990705e-01, -9.90674913e-01]],\n",
       "\n",
       "        [[ 9.56161022e-01,  1.62170720e+00, -1.19630969e+00],\n",
       "         [ 1.76299214e-01,  3.51115316e-01,  5.41068256e-01],\n",
       "         [ 4.89939451e-01, -2.20488739e+00, -1.05383122e+00],\n",
       "         ...,\n",
       "         [ 1.71932173e+00,  7.59614706e-01, -1.24161983e+00],\n",
       "         [-1.09051339e-01,  1.26480854e+00, -1.06042051e+00],\n",
       "         [-1.83947787e-01, -7.38581002e-01,  2.22325295e-01]],\n",
       "\n",
       "        [[-6.05599940e-01,  1.34881210e+00, -1.30150545e+00],\n",
       "         [ 1.45950127e+00, -2.11359337e-02,  1.72647083e+00],\n",
       "         [-9.93281364e-01,  1.18163511e-01,  6.76577210e-01],\n",
       "         ...,\n",
       "         [-1.57572120e-01,  6.42813385e-01, -1.70966280e+00],\n",
       "         [-1.55432451e+00,  1.10912228e+00,  1.65817022e+00],\n",
       "         [-1.01787806e+00, -9.84751463e-01,  9.64325130e-01]]],\n",
       "\n",
       "\n",
       "       [[[ 9.87086236e-01,  1.01660597e+00,  3.89129341e-01],\n",
       "         [-7.05140755e-02, -4.75890994e-01, -9.96782482e-01],\n",
       "         [-8.08748245e-01,  6.33708119e-01,  1.56911850e+00],\n",
       "         ...,\n",
       "         [-1.21546447e-01,  7.75518060e-01, -3.49573717e-02],\n",
       "         [-1.14731419e+00, -1.66930735e+00,  3.33495587e-01],\n",
       "         [-1.50938332e+00,  1.78505075e+00, -2.00186506e-01]],\n",
       "\n",
       "        [[-1.35176325e+00,  2.89415598e-01, -5.79778731e-01],\n",
       "         [ 5.35497665e-02, -8.56130719e-01,  2.71611238e+00],\n",
       "         [-1.54915705e-01,  3.96167517e-01, -1.31910965e-01],\n",
       "         ...,\n",
       "         [ 9.97630298e-01,  5.78460656e-02,  5.37439823e-01],\n",
       "         [ 1.61765110e+00, -5.21016598e-01, -9.98811603e-01],\n",
       "         [-2.03494596e+00,  2.47299343e-01, -5.27995825e-01]],\n",
       "\n",
       "        [[-2.63168168e+00,  3.77595425e-01,  6.96157515e-01],\n",
       "         [ 1.00485575e+00, -3.08982313e-01,  1.58882320e-01],\n",
       "         [-4.17036414e-01,  1.48479295e+00, -1.40121296e-01],\n",
       "         ...,\n",
       "         [ 8.28627288e-01,  9.65121984e-01, -2.15421960e-01],\n",
       "         [-1.41135138e-02, -8.15516114e-01,  5.04193485e-01],\n",
       "         [ 3.85768652e-01,  1.18360031e+00,  1.41617203e+00]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 9.30071592e-01,  6.65128350e-01,  7.65804872e-02],\n",
       "         [ 5.35867549e-02,  7.64763117e-01,  4.39680934e-01],\n",
       "         [-1.08909500e+00, -4.69493806e-01,  8.03562880e-01],\n",
       "         ...,\n",
       "         [-8.83802593e-01,  3.44968706e-01, -3.07317424e+00],\n",
       "         [-1.35149896e+00,  2.52304971e-01, -2.02670407e+00],\n",
       "         [-1.07736266e+00, -3.85990500e-01, -5.73178709e-01]],\n",
       "\n",
       "        [[ 2.27867508e+00, -1.00258768e+00, -3.55752051e-01],\n",
       "         [ 2.57526159e-01, -1.00412428e+00, -7.40321040e-01],\n",
       "         [ 5.13390005e-02, -1.02857006e+00,  6.62097871e-01],\n",
       "         ...,\n",
       "         [-3.03976446e-01,  5.00331938e-01,  4.14989255e-02],\n",
       "         [-6.30916595e-01,  5.44023693e-01, -3.05766612e-01],\n",
       "         [-6.55456185e-01, -8.92117321e-01, -1.82686269e-01]],\n",
       "\n",
       "        [[ 3.04129094e-01, -7.60973394e-01, -3.79676312e-01],\n",
       "         [ 8.84778500e-01,  1.93629038e+00,  3.04103523e-01],\n",
       "         [-8.07544708e-01,  1.26806235e+00,  4.98001039e-01],\n",
       "         ...,\n",
       "         [ 1.44141662e+00, -9.05145228e-01, -1.09822229e-01],\n",
       "         [-1.07442355e+00, -1.73371851e-01, -2.59353638e-01],\n",
       "         [ 8.74610305e-01,  1.10197890e+00,  6.40892923e-01]]],\n",
       "\n",
       "\n",
       "       [[[ 1.05440393e-01,  9.87977326e-01, -1.23925507e+00],\n",
       "         [-1.12814546e+00,  8.00961494e-01,  2.34936371e-01],\n",
       "         [ 1.42777026e+00, -8.39979112e-01, -1.40697941e-01],\n",
       "         ...,\n",
       "         [-2.63551176e-01,  2.40786836e-01,  1.20507598e-01],\n",
       "         [ 3.92111659e-01, -1.36242807e+00, -1.38818979e+00],\n",
       "         [ 1.57067871e+00,  1.27862942e+00,  9.91906583e-01]],\n",
       "\n",
       "        [[-3.16562921e-01,  1.77532181e-01,  1.86275101e+00],\n",
       "         [-1.75702500e+00,  2.13492537e+00,  8.08973372e-01],\n",
       "         [ 5.52621391e-03,  2.68086612e-01,  3.70153755e-01],\n",
       "         ...,\n",
       "         [-2.26302600e+00, -2.00558114e+00,  2.81517297e-01],\n",
       "         [ 1.40789092e+00, -1.08991885e+00, -6.04557455e-01],\n",
       "         [ 5.21637738e-01, -1.54295534e-01, -1.44303381e-01]],\n",
       "\n",
       "        [[ 3.25184882e-01,  8.03484976e-01, -1.50976494e-01],\n",
       "         [ 1.47126997e+00,  6.87355638e-01,  4.54107493e-01],\n",
       "         [ 1.52554560e+00, -3.47208709e-01, -9.86187160e-01],\n",
       "         ...,\n",
       "         [-5.45235910e-02, -1.57614961e-01,  1.74501374e-01],\n",
       "         [-3.05846781e-01,  6.91868067e-01, -3.99821967e-01],\n",
       "         [ 1.64886534e+00,  1.88389316e-01,  8.18515062e-01]],\n",
       "\n",
       "        ...,\n",
       "\n",
       "        [[ 9.98847663e-01,  1.24874979e-01, -1.51617154e-01],\n",
       "         [-5.81700504e-01, -5.47688305e-01, -1.95508048e-01],\n",
       "         [-1.51953685e+00, -8.41623485e-01,  5.81912370e-03],\n",
       "         ...,\n",
       "         [-5.42287111e-01,  1.46674562e+00,  2.35242918e-01],\n",
       "         [-7.35181630e-01, -3.75955433e-01, -2.47012687e+00],\n",
       "         [-3.55724543e-01, -4.02336866e-01,  4.77741301e-01]],\n",
       "\n",
       "        [[ 6.29131675e-01,  2.04055563e-01,  3.50940168e-01],\n",
       "         [ 4.62265939e-01,  1.83742154e+00, -2.77625412e-01],\n",
       "         [-9.64236796e-01,  7.86778748e-01,  4.20248240e-01],\n",
       "         ...,\n",
       "         [-6.86121106e-01, -1.71837881e-01,  8.47542584e-01],\n",
       "         [-5.05937815e-01, -1.04915112e-01,  3.15016174e+00],\n",
       "         [ 2.33349860e-01,  1.17061786e-01, -7.00146198e-01]],\n",
       "\n",
       "        [[ 2.31619969e-01,  5.75065970e-01,  3.51352729e-02],\n",
       "         [ 1.99353302e+00,  5.16459942e-01, -7.81002998e-01],\n",
       "         [ 4.02370512e-01,  1.22281916e-01,  3.33689690e-01],\n",
       "         ...,\n",
       "         [-9.51727331e-01, -2.40592957e+00, -2.38196567e-01],\n",
       "         [-1.87745416e+00,  2.42314863e+00, -1.72733486e-01],\n",
       "         [ 6.65777504e-01,  1.00510705e+00,  1.29786015e+00]]]],\n",
       "      dtype=float32)>"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.normal([4,32,32,3])\n",
    "tf.tile(x,[2,3,3,1]) # 数据复制"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据限幅"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在 TensorFlow 中，可以通过 tf.maximum(x, a)实现数据的下限幅，即$x \\in [a, +\\infty]$；可\n",
    "以通过 tf.minimum(x, a)实现数据的上限幅，即$x \\in (-\\infty, a]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=255, shape=(9,), dtype=int32, numpy=array([2, 2, 2, 3, 4, 5, 6, 7, 8])>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.range(9)\n",
    "# 下限幅到 2\n",
    "tf.maximum(x,2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=257, shape=(9,), dtype=int32, numpy=array([0, 1, 2, 3, 4, 5, 6, 7, 7])>"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 上限幅到 7\n",
    "tf.minimum(x,7) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ReLU 函数\n",
    "def relu(x): \n",
    "    # 下限幅为 0 即可\n",
    "    return tf.maximum(x,0.) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=265, shape=(9,), dtype=int32, numpy=array([2, 2, 2, 3, 4, 5, 6, 7, 7])>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.range(9)\n",
    "# 限幅为 2~7\n",
    "tf.minimum(tf.maximum(x,2),7) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以使用 tf.clip_by_value 函数实现上下限幅"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=273, shape=(9,), dtype=int32, numpy=array([2, 2, 2, 3, 4, 5, 6, 7, 7])>"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.range(9)\n",
    "# 限幅为 2~7\n",
    "tf.clip_by_value(x,2,7) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 高级操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "tf.gather 可以实现根据索引号收集数据的目的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=280, shape=(2, 35, 8), dtype=int32, numpy=\n",
       "array([[[89, 66, 65,  6, 44, 21, 48, 86],\n",
       "        [88,  2, 95, 63,  6, 49,  4, 26],\n",
       "        [98, 54, 65, 67, 58, 56, 12, 60],\n",
       "        [35, 59, 99, 12, 62,  4, 89, 34],\n",
       "        [ 8, 25, 19, 26, 61, 42, 52, 99],\n",
       "        [54,  4, 40, 68, 25, 41, 27, 88],\n",
       "        [88, 56, 23, 18, 17, 22, 89, 60],\n",
       "        [64, 96, 89, 14, 91, 63, 81,  6],\n",
       "        [ 9, 70, 14, 39, 47,  6, 67, 43],\n",
       "        [71,  4, 80, 39, 46, 32, 95, 70],\n",
       "        [40, 12, 86, 62, 51, 59, 16, 13],\n",
       "        [12, 97, 97, 80, 67, 25, 27, 64],\n",
       "        [83, 16, 33, 56, 30, 63, 81, 19],\n",
       "        [ 6, 42, 25, 52, 54, 25, 88, 42],\n",
       "        [52, 17, 98, 17, 22,  8, 31, 47],\n",
       "        [ 1, 38, 35, 78, 93, 31, 58, 76],\n",
       "        [ 7, 94, 41, 95, 95, 86, 30, 46],\n",
       "        [91, 86, 59, 30, 73,  6, 58, 35],\n",
       "        [82, 80, 94, 41, 11, 93, 60, 31],\n",
       "        [80, 21, 12, 96, 19, 75, 15, 12],\n",
       "        [80, 11, 94, 10, 18, 91,  4, 74],\n",
       "        [26, 32, 53, 83, 55, 23,  8, 27],\n",
       "        [57, 70, 44, 63, 44, 31,  9, 59],\n",
       "        [77, 32, 82, 28, 59, 10, 75, 82],\n",
       "        [96, 30, 75, 85, 95, 57, 59, 45],\n",
       "        [46, 68, 92, 74, 34, 34,  3, 96],\n",
       "        [27, 98,  7, 96, 33, 99, 59, 49],\n",
       "        [83,  7, 25, 42, 76, 16, 65, 74],\n",
       "        [79, 13, 20, 17,  3, 10, 57, 44],\n",
       "        [57, 99, 79, 74, 38,  6, 20, 61],\n",
       "        [56, 73, 90, 29, 58, 63, 49, 76],\n",
       "        [30,  1, 63,  4, 96, 21, 98, 60],\n",
       "        [58, 14, 52,  4, 93, 39, 64, 44],\n",
       "        [77, 82, 98, 91, 33, 59, 26, 57],\n",
       "        [67,  2, 77, 20, 53,  9, 64, 34]],\n",
       "\n",
       "       [[25, 30, 85, 56, 45, 54, 36, 59],\n",
       "        [67, 93, 92, 29, 79, 11, 76, 95],\n",
       "        [78, 37, 89, 25, 87, 88, 22, 14],\n",
       "        [ 4, 18, 77, 96, 14, 27, 15, 64],\n",
       "        [20, 35, 30, 51, 74, 28, 64, 51],\n",
       "        [84, 91, 70, 45,  4, 32, 50, 45],\n",
       "        [53, 13, 24, 89, 30,  5,  1, 36],\n",
       "        [28, 29, 11, 67, 21,  7, 94, 81],\n",
       "        [36, 87, 91, 96, 61, 64, 40, 91],\n",
       "        [29, 64, 84, 60, 14, 65, 75, 41],\n",
       "        [62, 75, 89, 72, 19, 70, 82, 71],\n",
       "        [92, 83, 95, 12, 73, 70, 11, 88],\n",
       "        [ 2,  9, 34, 85, 57, 80,  8, 80],\n",
       "        [69, 75, 50, 66, 64, 86, 42, 99],\n",
       "        [41, 71, 58, 28, 23, 82, 47,  1],\n",
       "        [95, 15, 56, 56, 15, 93, 52, 69],\n",
       "        [95, 60, 75, 47, 81, 97, 98, 96],\n",
       "        [85, 46,  1, 93, 16, 43, 64, 82],\n",
       "        [55, 63, 80, 25, 97,  9, 57, 60],\n",
       "        [20, 19, 16, 73, 98, 38,  9, 56],\n",
       "        [42, 50,  4, 44, 68, 28, 68, 91],\n",
       "        [64, 33, 54, 47, 72, 49, 39, 28],\n",
       "        [46, 20,  6, 75, 16, 35, 88, 71],\n",
       "        [84, 82, 54, 37, 40, 73, 96, 78],\n",
       "        [ 3, 38, 23, 70, 96, 89,  3, 27],\n",
       "        [68, 57, 76, 30,  4, 90, 60, 66],\n",
       "        [19, 69, 43, 94, 40, 39, 80, 31],\n",
       "        [12, 69,  1, 47, 91, 38, 92, 75],\n",
       "        [37, 60, 41,  6, 82, 18, 95, 86],\n",
       "        [88, 15, 14, 14, 84, 95, 21, 97],\n",
       "        [56, 13, 62, 52, 42, 83, 94, 20],\n",
       "        [55, 45, 27, 40, 66,  8, 40, 37],\n",
       "        [25, 78, 57, 20,  6, 93, 17, 76],\n",
       "        [70, 81, 80, 26, 49, 90, 46, 44],\n",
       "        [15, 81, 41,  3, 98, 47, 77, 14]]])>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模拟成绩册张量\n",
    "x = tf.random.uniform([4,35,8],maxval=100,dtype=tf.int32) \n",
    "# 在班级维度收集第 1~2 号班级成绩册\n",
    "tf.gather(x,[0,1],axis=0) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=283, shape=(4, 6, 8), dtype=int32, numpy=\n",
       "array([[[89, 66, 65,  6, 44, 21, 48, 86],\n",
       "        [35, 59, 99, 12, 62,  4, 89, 34],\n",
       "        [ 9, 70, 14, 39, 47,  6, 67, 43],\n",
       "        [12, 97, 97, 80, 67, 25, 27, 64],\n",
       "        [83, 16, 33, 56, 30, 63, 81, 19],\n",
       "        [27, 98,  7, 96, 33, 99, 59, 49]],\n",
       "\n",
       "       [[25, 30, 85, 56, 45, 54, 36, 59],\n",
       "        [ 4, 18, 77, 96, 14, 27, 15, 64],\n",
       "        [36, 87, 91, 96, 61, 64, 40, 91],\n",
       "        [92, 83, 95, 12, 73, 70, 11, 88],\n",
       "        [ 2,  9, 34, 85, 57, 80,  8, 80],\n",
       "        [19, 69, 43, 94, 40, 39, 80, 31]],\n",
       "\n",
       "       [[41, 79, 16, 54, 13, 71, 39, 89],\n",
       "        [33, 48, 45, 22, 79, 57, 78, 24],\n",
       "        [51, 51, 51, 73, 56, 65, 58, 16],\n",
       "        [22, 10, 91, 92,  1, 63, 91, 34],\n",
       "        [64, 19, 57, 11, 39, 83, 11, 73],\n",
       "        [22, 55, 79, 16, 71, 98, 92, 97]],\n",
       "\n",
       "       [[75, 40,  0, 80, 82, 57, 29, 35],\n",
       "        [70, 29, 58, 69, 75, 26, 19, 59],\n",
       "        [46, 60,  8, 89, 79,  7, 95, 55],\n",
       "        [ 7, 63, 44, 65, 65, 34, 19, 70],\n",
       "        [96, 86, 29,  7, 11, 19, 50,  0],\n",
       "        [75, 14,  5, 27, 51, 68, 66, 49]]])>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 收集第 1,4,9,12,13,27 号同学成绩\n",
    "tf.gather(x,[0,3,8,11,12,26],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=286, shape=(4, 35, 2), dtype=int32, numpy=\n",
       "array([[[65, 44],\n",
       "        [95,  6],\n",
       "        [65, 58],\n",
       "        [99, 62],\n",
       "        [19, 61],\n",
       "        [40, 25],\n",
       "        [23, 17],\n",
       "        [89, 91],\n",
       "        [14, 47],\n",
       "        [80, 46],\n",
       "        [86, 51],\n",
       "        [97, 67],\n",
       "        [33, 30],\n",
       "        [25, 54],\n",
       "        [98, 22],\n",
       "        [35, 93],\n",
       "        [41, 95],\n",
       "        [59, 73],\n",
       "        [94, 11],\n",
       "        [12, 19],\n",
       "        [94, 18],\n",
       "        [53, 55],\n",
       "        [44, 44],\n",
       "        [82, 59],\n",
       "        [75, 95],\n",
       "        [92, 34],\n",
       "        [ 7, 33],\n",
       "        [25, 76],\n",
       "        [20,  3],\n",
       "        [79, 38],\n",
       "        [90, 58],\n",
       "        [63, 96],\n",
       "        [52, 93],\n",
       "        [98, 33],\n",
       "        [77, 53]],\n",
       "\n",
       "       [[85, 45],\n",
       "        [92, 79],\n",
       "        [89, 87],\n",
       "        [77, 14],\n",
       "        [30, 74],\n",
       "        [70,  4],\n",
       "        [24, 30],\n",
       "        [11, 21],\n",
       "        [91, 61],\n",
       "        [84, 14],\n",
       "        [89, 19],\n",
       "        [95, 73],\n",
       "        [34, 57],\n",
       "        [50, 64],\n",
       "        [58, 23],\n",
       "        [56, 15],\n",
       "        [75, 81],\n",
       "        [ 1, 16],\n",
       "        [80, 97],\n",
       "        [16, 98],\n",
       "        [ 4, 68],\n",
       "        [54, 72],\n",
       "        [ 6, 16],\n",
       "        [54, 40],\n",
       "        [23, 96],\n",
       "        [76,  4],\n",
       "        [43, 40],\n",
       "        [ 1, 91],\n",
       "        [41, 82],\n",
       "        [14, 84],\n",
       "        [62, 42],\n",
       "        [27, 66],\n",
       "        [57,  6],\n",
       "        [80, 49],\n",
       "        [41, 98]],\n",
       "\n",
       "       [[16, 13],\n",
       "        [52, 56],\n",
       "        [62, 71],\n",
       "        [45, 79],\n",
       "        [86, 38],\n",
       "        [19, 69],\n",
       "        [16, 94],\n",
       "        [16, 79],\n",
       "        [51, 56],\n",
       "        [99, 22],\n",
       "        [51, 90],\n",
       "        [91,  1],\n",
       "        [57, 39],\n",
       "        [94,  0],\n",
       "        [72, 60],\n",
       "        [61, 87],\n",
       "        [53, 55],\n",
       "        [26,  7],\n",
       "        [84, 81],\n",
       "        [43, 20],\n",
       "        [ 3, 43],\n",
       "        [37, 75],\n",
       "        [20, 91],\n",
       "        [16, 65],\n",
       "        [72, 69],\n",
       "        [45, 65],\n",
       "        [79, 71],\n",
       "        [94, 99],\n",
       "        [97, 96],\n",
       "        [68, 20],\n",
       "        [10, 35],\n",
       "        [36, 99],\n",
       "        [20, 22],\n",
       "        [ 9, 63],\n",
       "        [65, 34]],\n",
       "\n",
       "       [[ 0, 82],\n",
       "        [35, 65],\n",
       "        [87, 10],\n",
       "        [58, 75],\n",
       "        [39, 75],\n",
       "        [72, 61],\n",
       "        [51, 92],\n",
       "        [89, 68],\n",
       "        [ 8, 79],\n",
       "        [14, 62],\n",
       "        [59, 11],\n",
       "        [44, 65],\n",
       "        [29, 11],\n",
       "        [35, 83],\n",
       "        [99, 47],\n",
       "        [81, 80],\n",
       "        [ 0, 83],\n",
       "        [70, 42],\n",
       "        [34, 79],\n",
       "        [67, 48],\n",
       "        [79, 66],\n",
       "        [52, 38],\n",
       "        [67, 18],\n",
       "        [79, 32],\n",
       "        [52, 42],\n",
       "        [23, 16],\n",
       "        [ 5, 51],\n",
       "        [82, 56],\n",
       "        [71, 29],\n",
       "        [89, 20],\n",
       "        [66, 89],\n",
       "        [62, 86],\n",
       "        [52, 53],\n",
       "        [48, 74],\n",
       "        [73, 40]]])>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 第 3， 5 科目的成绩\n",
    "tf.gather(x,[2,4],axis=2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=292, shape=(4, 2), dtype=int32, numpy=\n",
       "array([[0, 1],\n",
       "       [2, 3],\n",
       "       [4, 5],\n",
       "       [6, 7]])>"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a=tf.range(8)\n",
    "#  生成张量 a\n",
    "a=tf.reshape(a,[4,2])\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=295, shape=(4, 2), dtype=int32, numpy=\n",
       "array([[6, 7],\n",
       "       [2, 3],\n",
       "       [0, 1],\n",
       "       [4, 5]])>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 收集第 4,2,1,3 号元素\n",
    "tf.gather(a,[3,1,0,2],axis=0) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果希望抽查第[2,3]班级的第[3,4,6,27]号同学的科目成绩，则可以通过组合多个 tf.gather 实现。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 收集第 2,3 号班级\n",
    "students=tf.gather(x,[1,2],axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=301, shape=(2, 4, 8), dtype=int32, numpy=\n",
       "array([[[78, 37, 89, 25, 87, 88, 22, 14],\n",
       "        [ 4, 18, 77, 96, 14, 27, 15, 64],\n",
       "        [84, 91, 70, 45,  4, 32, 50, 45],\n",
       "        [19, 69, 43, 94, 40, 39, 80, 31]],\n",
       "\n",
       "       [[56, 54, 62, 10, 71, 19, 40, 73],\n",
       "        [33, 48, 45, 22, 79, 57, 78, 24],\n",
       "        [99, 74, 19, 12, 69, 49, 74, 25],\n",
       "        [22, 55, 79, 16, 71, 98, 92, 97]]])>"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 基于 students 张量继续收集\n",
    "# 收集第 3,4,6,27 号同学\n",
    "tf.gather(students,[2,3,5,26],axis=1) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们希望抽查第 2 个班级的第 2 个同学的所有科目， 第 3 个班级的第 3 个同学的所有科目，第 4 个班级的第 4 个同学的所有科目。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=305, shape=(8,), dtype=int32, numpy=array([67, 93, 92, 29, 79, 11, 76, 95])>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 收集第 2 个班级的第 2 个同学\n",
    "x[1,1] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=318, shape=(3, 8), dtype=int32, numpy=\n",
       "array([[67, 93, 92, 29, 79, 11, 76, 95],\n",
       "       [56, 54, 62, 10, 71, 19, 40, 73],\n",
       "       [70, 29, 58, 69, 75, 26, 19, 59]])>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.stack([x[1,1],x[2,2],x[3,3]],axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=320, shape=(3, 8), dtype=int32, numpy=\n",
       "array([[67, 93, 92, 29, 79, 11, 76, 95],\n",
       "       [56, 54, 62, 10, 71, 19, 40, 73],\n",
       "       [70, 29, 58, 69, 75, 26, 19, 59]])>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据多维坐标收集数据\n",
    "tf.gather_nd(x,[[1,1],[2,2],[3,3]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=322, shape=(3,), dtype=int32, numpy=array([92, 10, 75])>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据多维度坐标收集数据\n",
    "tf.gather_nd(x,[[1,1,2],[2,2,3],[3,3,4]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过给定掩码(Mask)的方式进行采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=350, shape=(2, 35, 8), dtype=int32, numpy=\n",
       "array([[[89, 66, 65,  6, 44, 21, 48, 86],\n",
       "        [88,  2, 95, 63,  6, 49,  4, 26],\n",
       "        [98, 54, 65, 67, 58, 56, 12, 60],\n",
       "        [35, 59, 99, 12, 62,  4, 89, 34],\n",
       "        [ 8, 25, 19, 26, 61, 42, 52, 99],\n",
       "        [54,  4, 40, 68, 25, 41, 27, 88],\n",
       "        [88, 56, 23, 18, 17, 22, 89, 60],\n",
       "        [64, 96, 89, 14, 91, 63, 81,  6],\n",
       "        [ 9, 70, 14, 39, 47,  6, 67, 43],\n",
       "        [71,  4, 80, 39, 46, 32, 95, 70],\n",
       "        [40, 12, 86, 62, 51, 59, 16, 13],\n",
       "        [12, 97, 97, 80, 67, 25, 27, 64],\n",
       "        [83, 16, 33, 56, 30, 63, 81, 19],\n",
       "        [ 6, 42, 25, 52, 54, 25, 88, 42],\n",
       "        [52, 17, 98, 17, 22,  8, 31, 47],\n",
       "        [ 1, 38, 35, 78, 93, 31, 58, 76],\n",
       "        [ 7, 94, 41, 95, 95, 86, 30, 46],\n",
       "        [91, 86, 59, 30, 73,  6, 58, 35],\n",
       "        [82, 80, 94, 41, 11, 93, 60, 31],\n",
       "        [80, 21, 12, 96, 19, 75, 15, 12],\n",
       "        [80, 11, 94, 10, 18, 91,  4, 74],\n",
       "        [26, 32, 53, 83, 55, 23,  8, 27],\n",
       "        [57, 70, 44, 63, 44, 31,  9, 59],\n",
       "        [77, 32, 82, 28, 59, 10, 75, 82],\n",
       "        [96, 30, 75, 85, 95, 57, 59, 45],\n",
       "        [46, 68, 92, 74, 34, 34,  3, 96],\n",
       "        [27, 98,  7, 96, 33, 99, 59, 49],\n",
       "        [83,  7, 25, 42, 76, 16, 65, 74],\n",
       "        [79, 13, 20, 17,  3, 10, 57, 44],\n",
       "        [57, 99, 79, 74, 38,  6, 20, 61],\n",
       "        [56, 73, 90, 29, 58, 63, 49, 76],\n",
       "        [30,  1, 63,  4, 96, 21, 98, 60],\n",
       "        [58, 14, 52,  4, 93, 39, 64, 44],\n",
       "        [77, 82, 98, 91, 33, 59, 26, 57],\n",
       "        [67,  2, 77, 20, 53,  9, 64, 34]],\n",
       "\n",
       "       [[75, 40,  0, 80, 82, 57, 29, 35],\n",
       "        [53, 47, 35, 98, 65, 82, 61, 13],\n",
       "        [ 0, 71, 87, 11, 10, 86, 29, 73],\n",
       "        [70, 29, 58, 69, 75, 26, 19, 59],\n",
       "        [67, 87, 39, 83, 75, 99,  1, 83],\n",
       "        [96, 91, 72,  1, 61, 22, 29, 57],\n",
       "        [88,  6, 51, 56, 92, 17, 44, 73],\n",
       "        [56, 82, 89, 92, 68, 75, 38, 21],\n",
       "        [46, 60,  8, 89, 79,  7, 95, 55],\n",
       "        [ 6, 52, 14, 21, 62, 36, 85, 37],\n",
       "        [96, 89, 59, 45, 11,  2, 95, 28],\n",
       "        [ 7, 63, 44, 65, 65, 34, 19, 70],\n",
       "        [96, 86, 29,  7, 11, 19, 50,  0],\n",
       "        [11, 59, 35, 21, 83, 96, 26, 82],\n",
       "        [ 3, 73, 99, 78, 47, 90, 83, 89],\n",
       "        [26, 47, 81, 35, 80,  7, 32, 99],\n",
       "        [95, 49,  0, 56, 83, 65, 27, 63],\n",
       "        [17, 29, 70, 37, 42, 68, 78, 31],\n",
       "        [48, 54, 34, 23, 79,  1, 75, 10],\n",
       "        [72, 55, 67, 31, 48, 91, 42, 92],\n",
       "        [90, 54, 79, 44, 66, 28, 67, 78],\n",
       "        [77, 37, 52, 54, 38, 50, 46, 35],\n",
       "        [42, 10, 67, 58, 18, 81, 21, 69],\n",
       "        [12, 26, 79, 53, 32, 90, 13, 69],\n",
       "        [86, 74, 52, 17, 42, 69, 50, 68],\n",
       "        [69, 95, 23, 12, 16, 26, 98, 25],\n",
       "        [75, 14,  5, 27, 51, 68, 66, 49],\n",
       "        [59, 76, 82, 26, 56, 11, 68, 76],\n",
       "        [94, 67, 71,  0, 29, 84, 50, 62],\n",
       "        [12, 42, 89, 21, 20, 12, 24,  0],\n",
       "        [76, 91, 66, 36, 89, 92, 74, 63],\n",
       "        [68, 85, 62, 71, 86, 25, 77, 45],\n",
       "        [99, 63, 52, 32, 53, 56, 85, 68],\n",
       "        [ 3, 47, 48,  3, 74, 36, 28, 60],\n",
       "        [37, 85, 73, 28, 40, 73, 43, 74]]])>"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据掩码方式采样班级，给出掩码和维度索引\n",
    "tf.boolean_mask(x,mask=[True, False,False,True],axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们将班级数量减少到 2 个，学生的数量减少到 3 个，即一个班级只有 3 个学生， shape 为[2,3,8]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=356, shape=(4, 8), dtype=int32, numpy=\n",
       "array([[67, 92, 39, 51, 48,  0, 19, 84],\n",
       "       [71, 28, 77, 19, 22, 77, 33, 62],\n",
       "       [16, 58, 58, 94, 29, 77, 57, 38],\n",
       "       [54, 58,  9, 80, 26, 72, 88, 85]])>"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = tf.random.uniform([2,3,8],maxval=100,dtype=tf.int32)\n",
    "# 多维坐标采集\n",
    "tf.gather_nd(x,[[0,0],[0,1],[1,1],[1,2]]) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=384, shape=(4, 8), dtype=int32, numpy=\n",
       "array([[67, 92, 39, 51, 48,  0, 19, 84],\n",
       "       [71, 28, 77, 19, 22, 77, 33, 62],\n",
       "       [16, 58, 58, 94, 29, 77, 57, 38],\n",
       "       [54, 58,  9, 80, 26, 72, 88, 85]])>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 多维掩码采样\n",
    "tf.boolean_mask(x,[[True,True,False],[False,True,True]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=392, shape=(3, 3), dtype=float32, numpy=\n",
       "array([[1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 1., 0.]], dtype=float32)>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造 a 为全 1 矩阵\n",
    "a = tf.ones([3,3]) \n",
    "# 构造 b 为全 0 矩阵\n",
    "b = tf.zeros([3,3]) \n",
    "# 构造采样条件\n",
    "cond = tf.constant([[True,False,False],[False,True,False],[True,True,False]])\n",
    "tf.where(cond,a,b) # 根据条件从 a,b 中采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=391, shape=(3, 3), dtype=bool, numpy=\n",
       "array([[ True, False, False],\n",
       "       [False,  True, False],\n",
       "       [ True,  True, False]])>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造的 cond 张量\n",
    "cond "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=393, shape=(4, 2), dtype=int64, numpy=\n",
       "array([[0, 0],\n",
       "       [1, 1],\n",
       "       [2, 0],\n",
       "       [2, 1]], dtype=int64)>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.where(cond) # 获取 cond 中为 True 的元素索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑一个场景，我们需要提取张量中所有正数的数据和索引。首先构造张量 a，并通过比较运算得到所有正数的位置掩码。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 构造 a\n",
    "x = tf.random.normal([3,3]) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=401, shape=(3, 3), dtype=bool, numpy=\n",
       "array([[False, False, False],\n",
       "       [False, False,  True],\n",
       "       [ True, False, False]])>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 比较操作，等同于 tf.math.greater()\n",
    "mask=x>0 \n",
    "mask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=402, shape=(2, 2), dtype=int64, numpy=\n",
       "array([[1, 2],\n",
       "       [2, 0]], dtype=int64)>"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 提取所有大于 0 的元素索引\n",
    "indices=tf.where(mask) \n",
    "indices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=403, shape=(2,), dtype=float32, numpy=array([0.30980122, 1.3135482 ], dtype=float32)>"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 提取正数的元素值\n",
    "tf.gather_nd(x,indices) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=430, shape=(2,), dtype=float32, numpy=array([0.30980122, 1.3135482 ], dtype=float32)>"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 通过掩码提取正数的元素值\n",
    "tf.boolean_mask(x,mask) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=434, shape=(8,), dtype=float32, numpy=array([0. , 1.1, 0. , 3.3, 4.4, 0. , 0. , 7.7], dtype=float32)>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造需要刷新数据的位置参数，即为 4、 3、 1 和 7 号位置\n",
    "indices = tf.constant([[4], [3], [1], [7]])\n",
    "# 构造需要写入的数据， 4 号位写入 4.4,3 号位写入 3.3，以此类推\n",
    "updates = tf.constant([4.4, 3.3, 1.1, 7.7])\n",
    "# 在长度为 8 的全 0 向量上根据 indices 写入 updates 数据\n",
    "tf.scatter_nd(indices, updates, [8])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tf.Tensor: id=438, shape=(4, 4, 4), dtype=int32, numpy=\n",
       "array([[[0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0]],\n",
       "\n",
       "       [[5, 5, 5, 5],\n",
       "        [6, 6, 6, 6],\n",
       "        [7, 7, 7, 7],\n",
       "        [8, 8, 8, 8]],\n",
       "\n",
       "       [[0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0]],\n",
       "\n",
       "       [[1, 1, 1, 1],\n",
       "        [2, 2, 2, 2],\n",
       "        [3, 3, 3, 3],\n",
       "        [4, 4, 4, 4]]])>"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构造写入位置，即 2 个位置\n",
    "indices = tf.constant([[1],[3]])\n",
    "# 构造写入数据，即 2 个矩阵\n",
    "updates = tf.constant([\n",
    "[[5,5,5,5],[6,6,6,6],[7,7,7,7],[8,8,8,8]],\n",
    "[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]]\n",
    "])\n",
    "# 在 shape 为[4,4,4]白板上根据 indices 写入 updates\n",
    "tf.scatter_nd(indices,updates,[4,4,4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(TensorShape([100, 100]), TensorShape([100, 100]))"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 设置 x 轴的采样点\n",
    "x = tf.linspace(-8.,8,100)\n",
    "# 设置 y 轴的采样点\n",
    "y = tf.linspace(-8.,8,100) \n",
    "# 生成网格点，并内部拆分后返回\n",
    "x,y = tf.meshgrid(x,y) \n",
    "# 打印拆分后的所有点的 x,y 坐标张量 shape\n",
    "x.shape,y.shape "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "z = tf.sqrt(x**2+y**2)\n",
    "# sinc 函数实现\n",
    "z = tf.sin(z)/z "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib\n",
    "from matplotlib import pyplot as plt\n",
    "# 导入 3D 坐标轴支持\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "fig = plt.figure()\n",
    "# 设置 3D 坐标轴\n",
    "ax = Axes3D(fig) \n",
    "# 根据网格点绘制 sinc 函数 3D 曲面\n",
    "ax.contour3D(x.numpy(), y.numpy(), z.numpy(), 50)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
